我正在尝试执行以下代码:
import re
pattern = r"(\w+)\*([\w\s]+)*/$"
re_compiled = re.compile(pattern)
results = re_compiled.search('COPRO*HORIZON 2000 HOR')
print(results.groups())
但是Python没有响应。该过程占用100%的CPU,并且不会停止。我已经在Python 2.7.1和Python 3.2上尝试了相同的结果。
由于您有嵌套的量词(),因此正则表达式会遭受灾难性的回溯([...]+)*
。由于您的正则表达式要求字符串结尾/
(在您的示例中失败),因此正则表达式引擎尝试对字符串进行所有排列都是徒劳的,希望找到匹配的组合。那就是它卡住的地方。
为了说明这一点,让我们假设"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个,尝试所有排列都会使您的计算机一直忙到最后一天。
我想您想做的是获取字符串before / after *
,在这种情况下,请使用
pattern = r"(\w+)\*([\w\s]+)$"
本文向大家介绍Python 实现try重新执行,包括了Python 实现try重新执行的使用技巧和注意事项,需要的朋友参考一下 Python try重新执行: 正确后会跳出循环,一直错误会进入死循环,不适合程序传入参数 以上这篇Python 实现try重新执行就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我是Spark的新生,并尝试完成Spark教程: 指向教程的链接 在本地计算机(Win10 64,Python 3,Spark 2.4.0)上安装它并设置所有环境变量(HADOOP_HOME,SPARK_HOME等)后,我试图通过WordCount.py文件运行一个简单的Spark作业: 从终端运行后: 我得到以下错误。我检查(逐行注释)它在崩溃 知道我应该检查些什么才能使其正常工作吗
我在Spring重新打包时遇到了一个错误:无法执行目标组织。springframework。boot:spring boot maven插件:2.1.7。发布:对项目宠物诊所数据重新打包:目标组织的执行重新打包。springframework。boot:spring boot maven插件:2.1.7。发布:重新打包失败:找不到主类。 即使我用了真的 pom设置好了。由于我没有任何主类,如何解决
问题内容: 我习惯从X开始评估我的。在我中,我使用启动我的窗口管理器。现在,如果我杀死了我的WM(为了测试其他WM),X也将终止,因为脚本到达了EOF。所以我在我的末尾添加了这个: 这样,如果我杀死WM,X不会终止。现在我的问题是:我该如何 无限睡眠 而不是循环睡眠?是否有一个类似于冻结脚本的命令? 最好的祝福 问题答案: 完全按照建议进行操作,并且不会虐待猫。
我正在为vertx使用RX-Ifified API,这个问题必须做一个潜在的无限重试直到成功循环,我想实现,但有困难。我是RXJava新手。 以下是我想做的: null 所以我想我可以使用RXJava的retryWhen()运算符,它允许我在根observable发出错误时发出第二个observable。我认为,第二个可观察的代码可能与上面在步骤1中生成初始观察者的代码相同。 但是,retryWh
连try都没法捕获这种错误吗,程序直接停了 with open('','r', encoding='utf-8') as file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: ''