正则表达式在python中占用太长时间

时间:2016-10-15 23:00:58

标签: python regex

我使用regex101测试我的正则表达式并且工作正常。我想要的是检测这些模式

  1. 第1.2节随机2
  2. 1.2 random 2
  3. 1.2。随机2
  4. random 2
  5. 随意2。
  6. 但是它只是随机的,如果字符串就像

    那么它不应该匹配
    1. 随机
    2. 我的正则表达是这样的。

        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)
      

      如果我用一个很长的字符串,它会卡住。任何想法?

1 个答案:

答案 0 :(得分:2)

经过一些简化后,这个正则表达式符合上述要求,并在下面的测试用例中重现。

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