1

我知道这可能是非常基本的,但我正在尝试创建一个仅匹配一组字符的某个倍数的正则表达式。例如,re.findall(expression, 'aaaa') 将返回 'aaaa' 但 re.findall(expression, 'aaa') 将返回 'aa',其中 expression 是一些涉及 aa 对的正则表达式。如果整个字符串是 'aa' 的整数倍,它只会返回整个字符串。有任何想法吗?

4

2 回答 2

1

只需使用(aa)+. (对于 findall,您需要使用非捕获组,所以(?:aa)+。)

>>> re.findall('(?:aa)+', 'aa')
['aa']
>>> re.findall('(?:aa)+', 'aaaa')
['aaaa']
>>> re.findall('(?:aa)+', 'aaaaa')
['aaaa']
于 2012-08-04T07:56:13.727 回答
0

尝试类似(?:(?:expression){3})+的方法来查找表达式的所有三的倍数。如果表达式更短,您也可以随意编写它。

如果您想匹配精确的重复项,请尝试例如(?:(expression)\1{2})+三的倍数。请注意,如果表达式不平凡,这可能需要回溯,因此可能很慢。

于 2012-08-04T08:03:55.200 回答