我正在尝试执行此代码:
import re
pattern = r"(\w+)\*([\w\s]+)*/$"
re_compiled = re.compile(pattern)
results = re_compiled.search('COPRO*HORIZON 2000 HOR')
print(results.groups())
Run Code Online (Sandbox Code Playgroud)
但Python没有回应.该过程占用100%的CPU并且不会停止.我在Python 2.7.1和Python 3.2上都尝试过这种方法,结果相同.
Tim*_*ker 60
你的正则表达式会遇到灾难性的回溯,因为你有嵌套的量词(([...]+)*).由于你的正则表达式要求字符串结束/(在你的例子中失败),正则表达式引擎尝试字符串的所有排列,徒劳地希望找到匹配的组合.这就是卡住的地方.
为了说明,我们假设"A*BCD"您的正则表达式的输入,看看会发生什么:
(\w+)比赛A.好.\*比赛*.好极了.[\w\s]+比赛BCD.好./无法匹配(没有匹配的字符).好吧,让我们备份一个角色./无法匹配D.哼.让我们再补充一些.[\w\s]+匹配BC,并重复[\w\s]+匹配D./无法匹配.备份./无法匹配D.备份更多.[\w\s]+匹配B,并重复[\w\s]+匹配CD./无法匹配.再次备份./无法匹配D.再补充一些.[\w\s]+比赛B,多次[\w\s]+比赛C,反复[\w\s]+的比赛D?没有?我们试试别的吧.[\w\s]+比赛BC.让我们停在这里,看看会发生什么./仍然不匹配D.[\w\s]+比赛B./不匹配C.(...)*./仍然不匹配B.那是一串只有三个字母的字符串.你的大约有30个,尝试所有的排列会让你的电脑忙碌直到几天结束.
我想你要做的是在之前/之后获取字符串*,在这种情况下,使用
pattern = r"(\w+)\*([\w\s]+)$"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4604 次 |
| 最近记录: |