簡體   English   中英

正則表達式在python中占用太長時間

[英]Regex taking too long in python

我用regex101來測試我的正則表達式並且工作正常。我想要的是檢測這些模式

  1. 第1.2節隨機2
  2. 1.2隨機2
  3. 1.2。 隨機2
  4. 隨機2
  5. 隨機2。

但它只是隨機它不應該匹配,如果字符串是這樣的

  1. 隨機

我的正則表達是這樣的。

  m = re.match(r"^(((section)\s*|(\d+\.)|\d+|(\d+\.\d+)|[a-zA-z\s]|[a-zA-z\.\s])+((\d+\.$)|\d+$|(\d+\.\d+$)))","random random random random random",flags = re.I)

如果我給一個很長的字符串它會卡住。任何想法?

經過一些簡化后,這個正則表達式符合上述要求,並在下面的測試用例中重現。

import re

regex = r'(?:section)*\s*(?:[0-9.])*\s*random\s+(?!random)(?:[0-9.])*'

strings = [
   "random random random random random",
   "section 1.2 random 2",
   "1.2 random 2",
   "1.2. random 2",
   "random 2",
   "random 2.",
   "random",
]

for string in strings:
    m = re.match(regex, string, flags = re.I)
    if m:
        print "match on", string
    else:
        print "non match on", string

它給出了一個輸出:

non match on random random random random random
match on section 1.2 random 2
match on 1.2 random 2
match on 1.2. random 2
match on random 2
match on random 2.
non match on random

請參閱以下網址https//eval.in/661183

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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