目录
用正则表达式提取字符串1. 单个位置的字符串提取2. 连续多个位置的字符串提取用正则表达式提取字符串中的整数总结用正则表达式提取字符串
在日常工作中经常遇见在文本中提取特定位置字符串的需求。
python的正则性能好,很适合做这类字符串的提取,正则表达式的提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串。
(资料图片仅供参考)
日志分析会遇到这种情况。
1. 单个位置的字符串提取
这种情况我们可以使用(.+?)这个正则表达式来提取. 举例,一个字符串"a123b",如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list,代码如下:
import re str = "a123b" print(re.findall(r"a(.+?)b",str)) #输出["123"]
1.1贪婪和非贪婪匹配
如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用?来控制正则贪婪和非贪婪匹配的情况. 代码如下:
import re str = "a123b456b" print(re.findall(r"a(.+?)b", str)) #输出["123"] #?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况 print(re.findall(r"a(.+)b", str)) #输出["123b456"] print(re.findall(r"a(.*)b", str)) #输出["123b456"]
1.2多行匹配
如果你要多行匹配,那么需要加上re.S和re.M标志. 加上re.S后, .将会匹配换行符,默认.不会匹配换行符. 代码如下:
str = "a23b\na34b" re.findall(r"a(\d+)b.+a(\d+)b", str) #输出[] #因为不能处理str中间有\n换行的情况 re.findall(r"a(\d+)b.+a(\d+)b", str, re.S) #s输出[("23", "34")]
加上re.M后,^$标志将会匹配每一行,默认^和$只会匹配第一行.
代码如下:
str = "a23b\na34b" re.findall(r"^a(\d+)b", str) #输出["23"] re.findall(r"^a(\d+)b", str, re.M) #输出["23", "34"]
2. 连续多个位置的字符串提取
这种情况我们可以使用(?P
举例:
如果我们有一行webserver的access日志:"192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"",我们想提取这行日志里面所有的内容,可以写多个(?P
代码如下:
import re line ="192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"" reg = re.compile("^(?P[^ ]*) (?P [^ ]*) "(?P [^"]*)" (?P [^ ]*) (?P [^ ]*) "(?P [^"]*)" "(?P [^"]*)"") regMatch = reg.match(line) linebits = regMatch.groupdict() print(linebits) for k, v in linebits.items() : print(k+": "+v)
输出的结果为:
status: 200
referrer:
request: GET /api HTTP/1.1
user_agent: Mozilla/5.0
date: 25/Oct/2012:14:46:34size: 44
remote_ip: 192.168.0.1
用正则表达式提取字符串中的整数
直接上代码吧~
import re re.findall("\d+","asd1234")
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?