+ -
当前位置:首页 → 问答吧 → 求助

求助

时间:2011-12-05

来源:互联网

根据理解:
* 匹配0个或更多个由前面的正则表达式定义的片段,贪婪方式(尽可能多的匹配)
那为什么
>>> str = re.compile("ab*c")
>>> str.findall("ababcabcabababc")
['abc', 'abc', 'abc']
输出是这样的呢??不是要输出['ababc','abc','abababc']的么??求指点,谢谢!

作者: Mr_JJ_Lian   发布时间: 2011-12-05

还有为什么这两个输出是相同的 呢?
>>> str = re.compile("abab+c")
>>> str.findall("ababcabcabababc")
['ababc', 'ababc']
>>> str = re.compile("ababc")
>>> str.findall("ababcabcabababc")
['ababc', 'ababc']

作者: Mr_JJ_Lian   发布时间: 2011-12-05

>>> str = re.compile("(abab+)c")
>>> str.findall("ababbbbbbbbbbbbbbcabcababababc")
['ababbbbbbbbbbbbbb', 'abab']
>>> str = re.compile("(abab)+c")
>>> str.findall("ababcabcababababc")
['abab', 'abab']
这两者有什么区别????求解答???

作者: Mr_JJ_Lian   发布时间: 2011-12-05

帖子1: ababc不能匹配ab*c, ac, abc, abbc, ...才可以.

帖子2: +表示"一个或多个",你的例子里恰好有一个b,所以abab+c和ababc的作用一样.用"ababbc"试试,就可看出不一样的地方了.

帖子3: (abaB+)c中是B可以重复一次或多次. (abab)+c中是abab可以重复一次或多次.

作者: panghuhu250   发布时间: 2011-12-05