正则表达式findall在python3中产生奇怪的结果

时间:2013-06-29 17:04:11

标签: python regex python-3.x

我想使用python找到字符串的所有docblock。 我的第一次尝试是这样的:

b = re.compile('\/\*(.)*?\*/', re.M|re.S)
match = b.search(string)
print(match.group(0))

这很有效,但是你会注意到自己:它只打印出1个docblock,而不是全部。

所以我想使用findall函数,它表示会输出所有匹配项,如下所示:

b = re.compile('\/\*(.)*?\*/', re.M|re.S)
match = b.findall(string)
print(match)

但我从来没有得到任何有用的东西,只有这些类型的数组:

[' ', ' ', ' ', '\t', ' ', ' ', ' ', ' ', ' ', '\t', ' ', ' ', ' ']

文档确实说它会返回空字符串,但我不知道它是如何有用的。

2 个答案:

答案 0 :(得分:2)

您需要在捕获组中移动quatifier:

b = re.compile('\/\*(.*?)\*/', re.M|re.S)

答案 1 :(得分:1)

为了扩展Rohit Jain的(正确的)答案,使用限定符之外的括号中,你会说“匹配(非贪婪)parens中任何一个字符的数字,并且抓住那个角色“。换句话说,它将匹配“”或“aaaaaa”,但在“abcde”中它只匹配“a”。 (因为它不贪婪,即使在“aaaaaa”中也只能匹配单个“a”)。通过在parens中移动限定符(即(.*?)而不是之前的那个),你现在说“匹配任意数量的字符,并捕获所有字符”。

我希望这可以帮助您了解更好的情况。