这是一个字符串例如
Clone into repo1...
some text
Clone into repo2...
some text
Clone into repo3...
some text
fatal: Some exception was thrown.
我正在尝试获取最后的“克隆到repo3”和致命消息。这是我正在写的正则表达式:(Clone into。+ fatal:。+?$)
with flags,re.DOTALL
和`re.MULTILINE
但是我得到了全部信息。我知道以某种方式我们可以做到这一点。* Clone into。+ fatal:。+?$),但是我要处理的文本确实很大,如果在前面使用
。*`将会花费大量时间。
谢谢大家的帮助!
编辑
我正在寻找一种正则表达式方式,因为我几乎有十个正则表达式,而且我不知道会匹配哪个正则表达式。
这是我编写的框架:
# Here's almost 10 compiled regex, some of them have this duplicated issue.
regex_list = [...]
for regex in regex_list:
res = regex.findall(log_text)
if res:
reason = res[0]
break
如果用正则表达式无法解决这个问题,也许我会重新考虑将所有这些正则表达式更改为一个通用函数,然后先执行rsplit。
顺便说一句,rsplit
方法需要在引发致命错误后停止测试。如果在引发致命错误后测试仍保持运行,则此方法将与异常不匹配...
问题来源:stackoverflow
对于长文本,首先拆分然后匹配所需的结果在子字符串中可能是有意义的。例如:
import re
text = """
Clone into repo1...
some text
Clone into repo2...
some text
Clone into repo3...
some text
fatal: Some exception was thrown.
"""
# Get the part after the last 'Clone into '
end = text.rsplit("Clone into ", 1)[1]
# Capture clone and fatal messages.
match = re.search(r'\A(.\*\r?\n[\s\S]\*\b(fatal: .\*', end)
# Fetch captures, if there are any.
groups = None if match is None else match.groups()
print(groups)
输出:
('repo3...', 'fatal: Some exception was thrown.')
如果您仍然需要短语“ Clone into`,请在使用第一个捕获组时在其前面添加前缀。整个过程可以用子字符串更优雅地完成,但是语法使我无所适从。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。