Python 正则表达式:如何忽略连词中的点
为了分析日志文件,我需要使用python和正则表达式提取异常类型。Python 正则表达式:如何忽略连词中的点,python,python-3.x,regex,string,Python,Python 3.x,Regex,String,为了分析日志文件,我需要使用python和正则表达式提取异常类型。 异常类型始终包含子字符串“exception”。 问题是子字符串“Exception”并不总是在其名称的末尾。 此外,异常类型由未知数量的点组成。 预期行为: 输入 “08-01-2021:存在System.InvalidCalculationException-系统重新启动” “09-01-2021:超级系统识别到System.IO.WritingException请求用户下一步做什么” “10-01-2021:哦,不,不
异常类型始终包含子字符串“exception”。
问题是子字符串“Exception”并不总是在其名称的末尾。
此外,异常类型由未知数量的点组成。
预期行为:
输入
“08-01-2021:存在System.InvalidCalculationException-系统重新启动”
“09-01-2021:超级系统识别到System.IO.WritingException请求用户下一步做什么”
“10-01-2021:哦,不,不再是内部异常。NullReference.NonCritical.User我们应该修复它!”
输出
“系统无效计算异常”
“System.IO.WritingException”
“InternalException.NullReference.NonCritical.User”
正则表达式应该是什么样子的?
对于以“Exception”结尾的异常类型,我已尝试使用“\w+[.]\w+[.]*Exception”进行测试。
但是,如果异常类型包含更多的点,并且“异常”不在末尾怎么办?您可以使用
\b(?[A-Za-z]+\)*[A-Za-z]*异常(?:\.[A-Za-z]+)*\b
\b(?:\w+\)*\w*异常(?:\。\w+*\b
见/。详情:
-单词边界\b
-零次或多次出现一个或多个字母后跟一个点(?:[A-Za-z]+\)*
-零个或多个字母[A-Za-z]*
-字符串异常
异常
-一个点的零次或多次重复,然后是一个或多个字母(?:\.[A-Za-z]+)*
-单词边界\b
\w
匹配任何字母、数字或下划线
Python用法:
re.findall(r'\b(?:\w+\)*\w*异常(?:\。\w+*\b',文本)
那么:
[^\s]*Exception[^\s]*
()
以上内容确保您的字符串包含单词“Exception”,并包含非空白字符的任何字符
[^\s]*
匹配任何不是(^
)空白(\s
)的0到无限次(*
)。根据您编写的内容,可以说每个异常都是一串字母和点
我认为这可以解决你的问题:
“([A-Z][A-Z]*)。([^\s]+)”
请在中查看,你能提供一个链接吗?我编辑了答案,请再次查看答案。我还添加了链接@NewUbuntuUser不适用于“InternalException.NullReference.NonCritical.User”您的解决方案是否总是给出与Jim Simson的解决方案相同的结果?@NewUbuntuUser否,有一个答案。