Python正则表达式:匹配指定字符串后提取首个目标数据
解决Python正则提取第一个目标字段的问题
嘿,作为Python正则新手遇到这个问题很正常,我来给你捋清楚怎么改!
首先分析你现有代码的问题:你用的正则(?<=ethernet33\s).*(?<=\s)里,.*是贪婪匹配,它会从ethernet33后的空格开始,一直匹配到字符串里最后一个空格前的所有内容——这就是为什么你拿到了后面所有字段。
要只提取第一个目标数字串20628103568,有两种简单靠谱的修改方式:
方法1:匹配非空白字符到下一个空格
把.*换成\S+,\S代表任意非空白字符,+表示匹配1个或多个,这样就会精准停在第一个空格前:
import re str1 = 'ethernet33 20628103568 111111 22222222222 ' match1 = re.search(r"(?<=ethernet33\s)\S+", str1) print(match1.group()) # 输出:20628103568
方法2:用捕获组匹配数字(更精准)
既然你要提取的是数字,直接用\d+匹配数字序列,结合捕获组更直观,还能避免意外匹配非数字内容:
import re str1 = 'ethernet33 20628103568 111111 22222222222 ' match1 = re.search(r"ethernet33\s(\d+)", str1) print(match1.group(1)) # 输出:20628103568
这里的(\d+)是捕获组,匹配到的数字会存在group(1)里,比纯预查的写法更易读。
两种方法都能完美满足你的需求,第二种因为明确指定了数字匹配,鲁棒性更强哦!
内容的提问来源于stack exchange,提问作者lax123
相关产品推荐
相关产品推荐

