Python3 中正则表达式 'ver="(.*?)"' 如何像 grep -o -E 一样只返回括号内匹配的数据?
()表示只匹配括号里的
.? 任意字符,非贪婪模式
grep -o 只返回匹配的
grep -E 扩展正则
数据都是
fjiojfiawejfoijf ver=“226800"fjiajfioafjio
Python 3 正则要只返回 226800,如下代码返回了 ver=“226800”
pattern = re.compile( 'ver=”(.?)"’)
string = ‘fjiojfiawejfoijf ver="226800"fjiajfioafjio’
print(re.search(pattern, string).group())
不知错在哪里,多谢指点。。
Python3 中正则表达式 ‘ver="(.*?)"’ 如何像 grep -o -E 一样只返回括号内匹配的数据?
groups()
import re
# 原始字符串
text = 'ver="1.2.3" and ver="4.5.6"'
# 使用findall直接获取括号内的内容
matches = re.findall(r'ver="(.*?)"', text)
print(matches) # 输出: ['1.2.3', '4.5.6']
# 或者使用finditer逐个获取
for match in re.finditer(r'ver="(.*?)"', text):
print(match.group(1)) # 输出: 1.2.3 然后 4.5.6
关键点:
re.findall()当正则中有捕获组时,只返回组内内容.*?是非贪婪匹配,匹配到第一个"就停止- 这完全对应
grep -o -E 'ver="([^"]*)"'的效果
要像grep一样只返回括号里的内容,直接用findall就行。
或 group(0)
In [53]: astring = ‘fjiojfiawejfoijf ver="226800"fjiajfioafjio’
In [54]: re.search(’(?<=ver=").*?(?=")’, astring).group()
Out[54]: ‘226800’
全部匹配: group(0)
括号中的匹配:group(1)
相当于 perl 中的$0 $1
:p
楼上的真是好脾气。遇到这种问题应该先甩一个 docs.python.org 的链接,精确到函数。
https://docs.python.org/3/library/re.html#re.match.group
Python 不需要用 compile
result = re.search(‘ver="(.*?)"’, string).group(1)
我就喜欢用 findall
用 python 应该熟读 python 文档,group 可破。
用正则应该熟读正则文档,(?<=exp)可破。
提问建议使用“ xxx 如何 yyy ”比较安全,而不是“ xxx 不能 yyy 吗?”,会激怒一大堆簇拥者。
对于一门尚未掌握的技术,起码保持一点敬畏吧。。。
赞一个, 楼上的太好脾气了


