正则表达式:如何忽略连词中的点

2024-09-29 19:36:47 发布

您现在位置:Python中文网/ 问答频道 /正文

为了分析日志文件,我需要使用python和正则表达式提取异常类型。
异常类型始终包含子字符串“exception”。
问题是子字符串“Exception”并不总是在其名称的末尾。
此外,异常类型由未知数量的点组成。

预期行为:

输入
“08-01-2021:存在System.InvalidCalculationException-系统重新启动”
“09-01-2021:超级系统识别出System.IO.WritingException请求用户下一步做什么”
“10-01-2021:哦,不,不再是内部异常。NullReference.NonCritical.User我们应该修复它!”

输出
“System.InvalidCalculationException”
“System.IO.WritingException”
“InternalException.NullReference.NonCritical.User”

正则表达式应该是什么样子的?
对于以“Exception”结尾的异常类型,我已尝试使用“\w+[.]\w+[.]*Exception”进行测试。
但是,如果异常类型包含更多的点,并且“异常”不在末尾,该怎么办


Tags: 文件字符串io名称类型系统exceptionsystem
3条回答

根据你写的,可以说每个例外都是一串字母和点

我认为这可以解决你的问题: “([A-Z][A-Z]*)。([^\s]+)”

签入link

那么:

[^\s]*Exception[^\s]*

Demo

以上内容确保您的字符串包含单词“Exception”,并包含非空白字符的任何字符

[^\s]*将任何不是(^)空白(\s)0的内容匹配到无限次(*

你可以用

\b(?:[A-Za-z]+\.)*[A-Za-z]*Exception(?:\.[A-Za-z]+)*\b
\b(?:\w+\.)*\w*Exception(?:\.\w+)*\b

regex demo/regex demo #2。详情:

  • \b-单词边界
  • (?:[A-Za-z]+\.)*-一个或多个字母后跟一个点的出现次数为零或多个
  • [A-Za-z]*-零个或多个字母
  • Exception-字符串Exception
  • (?:\.[A-Za-z]+)*-一个点的零次或多次重复,然后是一个或多个字母
  • \b-单词边界

\w匹配任何字母、数字或下划线

Python用法:

re.findall(r'\b(?:\w+\.)*\w*Exception(?:\.\w+)*\b', text)

相关问题 更多 >

    热门问题