1

我想使用 python 查找字符串的所有文档块。我的第一次尝试是这样的:

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

这很有效,但是您会注意到:它只会打印出 1 个文档块,而不是全部。

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

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

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

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

文档确实说它会返回空字符串,但我不知道这有什么用处。

4

2 回答 2

3

您需要在捕获组内移动限定符:

b = re.compile('\/\*(.*?)\*/', re.M|re.S)
于 2013-06-29T17:06:28.783 回答
2

为了扩展 Rohit Jain 的(正确)答案,括号的限定符是你说的“匹配(非贪婪地)括号内的任意数量的一个字符,并捕获那个字符”。换句话说,它会匹配“”或“aaaaaa”,但在“abcde”中它只会匹配“a”。(而且由于它是非贪婪的,即使在“aaaaaa”中它也只会匹配一个“a”)。通过在括号内移动限定符(也就是说,(.*?)而不是以前的),您现在说的是“匹配任意数量的字符,并捕获所有字符”。

我希望这可以帮助您更好地了解正在发生的事情。

于 2013-06-29T17:23:18.020 回答