Squ*_*art 2 python regex substitution
这不会给我一个错误或答案.
re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................')
Run Code Online (Sandbox Code Playgroud)
为什么它会这样?此外,如果我减少'期间'的数量,那么它的工作原理.
谢谢.
您的输入字符串中没有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
Run Code Online (Sandbox Code Playgroud)
更新:你的正则表达遭受灾难性的回溯 ; 避免使用通配符的组中的嵌套字符类或字符集组合(上面列出的branch .. or部分max_repeat).您可以将字符类放在字符集中以避免这种情况.
另请注意,您可以使用r''原始字符串表示法来避免所有转义的反斜杠.
以下作品:
re.sub(r'\.[\W\.]*[o0][\Wo0]*', '*', '..........................................')
Run Code Online (Sandbox Code Playgroud)
因为它编译为:
>>> 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
Run Code Online (Sandbox Code Playgroud)
请注意,现在分支已经消失.