这不会给我错误或答案。
re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................')
为什么会这样?另外,如果我减少'句号'的数量,那么它就可以了。
谢谢。
答案 0 :(得分:8)
答案 1 :(得分:5)
您的输入字符串中没有o
或0
,但您的正则表达式要求其中至少有一个字符([o0]
)。
>>> re.compile('\\.(\\W|\\.)*[o0](\\W|[o0])*', re.DEBUG)
literal 46
max_repeat 0 65535
subpattern 1
branch
in
category category_not_word
or
literal 46
in
literal 111
literal 48
max_repeat 0 65535
subpattern 2
branch
in
category category_not_word
or
in
literal 111
literal 48
更新:你的正则表达式受到catastrophic backtracking的影响;避免使用通配符的组中的嵌套字符类或字符集组合(上面列出的branch .. or
内的max_repeat
部分)。您可以将字符类放在字符集中以避免这种情况。
另请注意,您可以使用r''
原始字符串表示法来避免所有转义的反斜杠。
以下作品:
re.sub(r'\.[\W\.]*[o0][\Wo0]*', '*', '..........................................')
因为它编译为:
>>> re.compile(r'\.[\W\.]*[o0][\Wo0]*', re.DEBUG)
literal 46
max_repeat 0 65535
in
category category_not_word
literal 46
in
literal 111
literal 48
max_repeat 0 65535
in
category category_not_word
literal 111
literal 48
请注意,现在分支已经消失。