一个很简单的正则问题,没搞明白

2017-12-29 21:25:00 +08:00
 geekyoung
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
    print "matchObj.group() : ", matchObj.group()
    print "matchObj.group(1) : ", matchObj.group(1)
    print "matchObj.group(2) : ", matchObj.group(2)
else:
    print "No match!!"

这来自菜鸟上的教程,自己正则上也一直类似这么写的。 但今天突然想到一个问题,刚开始使用(.*)来匹配的话,岂不是直接可以匹配到最后了, .* 代表匹配除换行符之外的所有字符, 那 are (.*?) .* 这块怎么匹配呢?实在无解。

2930 次点击
所在节点    程序员
29 条回复
geekyoung
2017-12-30 21:55:44 +08:00
@cnt2ex 哦哦
geekyoung
2017-12-30 21:56:08 +08:00
@imn1 明白 谢谢
geekyoung
2017-12-30 21:56:23 +08:00
@azh7138m 好文 赞
skydiver
2017-12-30 23:23:26 +08:00
@geekyoung 好吧…眼花了没看到空格
OscarUsingChen
2017-12-30 23:43:39 +08:00
@geekyoung 如果第一项匹配了整个 string,那么这个 Regex 算是匹配失败,因为后面的一堆 regex 东西没法匹配到东西
mztql
2017-12-31 03:01:11 +08:00
@azh7138m 啊哈 当初也看了这个
Telegram
2018-01-01 08:45:04 +08:00
@boboliu #5 帅哥,你 5 楼说的前半句和后半句有区别吗?
boboliu
2018-01-01 09:17:26 +08:00
@Telegram 有区别啊,这里是因为文字丢失了来自重读的部分信息,所以你只能脑补理解
Telegram
2018-01-01 10:02:07 +08:00
@boboliu #28 原来你是故意的。。。。。。

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

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

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

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

© 2021 V2EX