[英]Python Regular Expression: why does this not work?
這不會給我一個錯誤或答案。
re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................')
為什么它會這樣? 此外,如果我減少'期間'的數量,那么它的工作原理。
謝謝。
你有災難性的回溯 。
輸入字符串中沒有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
更新:你的正則表達遭受災難性的回溯 ; 避免使用通配符的組中的嵌套字符類或字符集組合( 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
請注意,現在分支已經消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.