Python3 里 'ver="(.*?)"'表达式 不能像 grep -o -E 'ver="(.*?)"'只返回()里匹配的数据?

2017-07-11 22:13:02 +08:00
 a251922581
()表示只匹配括号里的
.*? 任意字符,非贪婪模式
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())

不知错在哪里,多谢指点。。
2368 次点击
所在节点    Python
11 条回复
glasslion
2017-07-11 22:21:01 +08:00
groups()
glasslion
2017-07-11 22:22:51 +08:00
或 group(0)
yucongo
2017-07-11 23:16:09 +08:00
In [53]: astring = 'fjiojfiawejfoijf ver="226800"fjiajfioafjio'

In [54]: re.search('(?<=ver=\").*?(?=\")', astring).group()
Out[54]: '226800'
264768502
2017-07-11 23:24:43 +08:00
pattern.search(string).group(1)
hugo775128583
2017-07-12 00:02:01 +08:00
group
daya0576
2017-07-12 01:18:25 +08:00
全部匹配: group(0)
括号中的匹配:group(1)

相当于 perl 中的$0 $1
:p
ipwx
2017-07-12 08:41:31 +08:00
楼上的真是好脾气。遇到这种问题应该先甩一个 docs.python.org 的链接,精确到函数。

https://docs.python.org/3/library/re.html#re.match.group
billion
2017-07-12 08:56:02 +08:00
Python 不需要用 compile
result = re.search('ver="(.*?)"', string).group(1)
aa825aa
2017-07-12 09:35:54 +08:00
我就喜欢用 findall
flyingghost
2017-07-12 10:45:44 +08:00
用 python 应该熟读 python 文档,group 可破。
用正则应该熟读正则文档,(?<=exp)可破。

提问建议使用“ xxx 如何 yyy ”比较安全,而不是“ xxx 不能 yyy 吗?”,会激怒一大堆簇拥者。
对于一门尚未掌握的技术,起码保持一点敬畏吧。。。
okletswin
2017-07-12 11:08:59 +08:00
@flyingghost 赞一个, 楼上的太好脾气了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX