簡體   English   中英

Python正則表達式:為什么這不起作用?

[英]Python Regular Expression: why does this not work?

這不會給我一個錯誤或答案。

re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................')  

為什么它會這樣? 此外,如果我減少'期間'的數量,那么它的工作原理。

謝謝。

你有災難性的回溯

輸入字符串中沒有o0 ,但正則表達式要求其中至少有一個字符( [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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM