【问题标题】:Regex findall produces strange results in python3正则表达式 findall 在 python3 中产生奇怪的结果
【发布时间】:2013-06-29 17:04:10
【问题描述】:

我想使用 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', ' ', ' ', ' ']

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

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      我希望这可以帮助您更好地了解发生了什么。

      【讨论】:

      • re.match('(.)*', 'abcde') 将匹配整个字符串,但捕获仅e,该组的最后一个重复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多