我正在尝试执行此代码:
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)