我不明白为什么'(\s*)+'
会出错'nothing to repeat'
。同时'(\s?)+'
进行得很好。
我发现这个问题已经有一段时间了(例如正则表达式错误 - 无需重复),但我仍然在 Python 3.3.1 中看到它。
所以我想知道这种行为是否有合理的解释。
实际上我想匹配一行重复的单词或数字,例如:
'foo foo foo foo'
我想出了这个:
'(\w+)\s+(\1\s*)+'
它失败是因为第二组:(\1\s*)+
在大多数情况下,我可能不会在单词之间留超过 1 个空格,所以(\1\s?)+
会起作用。出于实际目的,此选项也应该有效(\1\s{0,1000})+
更新: 我想我应该补充一点,我只在 python 中看到了这个问题。在 perl 中它可以工作:
`('foo foo foo foo' =~ /(\w+)\s+(\1\s*)+/) `
不确定它是否等效,但 vim 也可以:
`\(\<\w\+\>\)\_s\+\(\1\_s*\)\+`
更新 2: 我找到了另一个用于 python 的正则表达式实现,据说它有一天会取代当前的 re。我检查了上述有问题的情况并没有发生错误。该模块必须单独安装。可以在这里下载或者通过pypi下载