请参阅我的正则表达式模式代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
print 'Start'
str1 = 'abcdefgasdsdfswossdfasdaef'
m = re.match(r"([A-Za-z\-\s\:\.]+)+(\d+)\w+", str1) # Want to match something like 'Moto 360x'
print m # None is expected.
print 'Done'
完成需要49秒,模式有问题吗?你知道吗
只需在NHAHDH和Marc B的评论中重新发布答案和解决方案:
([A-Za-z\-\s\:\.]+)+
>;[A-Za-z\-\s\:\.]+
非常感谢nhahdh和Marc B!你知道吗
见Runaway Regular Expressions: Catastrophic Backtracking。你知道吗
简言之,如果有非常多的组合,一个子串可以被分割成正则表达式的各个部分,正则表达式匹配器可能最终会尝试所有这些组合。你知道吗
像
(x+)+
和x+x+
这样的结构实际上保证了这种行为。你知道吗要检测和修复有问题的构造,可以使用以下概念:
在概念层面上,有问题的构造意味着正则表达式是不明确的,也就是说,如果忽略贪婪/懒惰的行为,就不会有一个“正确”的将某些文本分割成正则表达式的部分(或者,等价地,它的子表达式)。因此,为了避免/解决问题,您需要看到并消除所有的歧义。你知道吗
一种方法是
相关问题 更多 >
编程相关推荐