我想检查每一行中是否存在日期。由于日期格式可以不同 - 我使用正则表达式|
从一开始就检查字符的存在
如果插入整个文本,则正则表达式^[^|]*
正确地确定它位于第一行。但是,如果每行单独搜索是否有符号|
,结果是即使没有找到匹配项
2022-04-14 17:16:45.896 | ERROR | app.services.xxx.services:eosd:38 - (<class 'KeyError'>, KeyError('data'), <traceback object at 0x75b968f5c180>)
Traceback (most recent call last):
File "/env/bin/uvicorn", line 8, in <module>
sys.exit(main())
│ │ └ <Command main>
看看你的测试结果:
发生这种情况的原因:在选定的标志中,有一个标志
m
允许操作员^
找到文本中任何行的开头。您可能认为就是这样,表达式只能逐行工作。不,它不是[^...]
一个否定(否定)字符类,它可以找到除给定类中指定的字符之外的任何字符。如果您没有在此类中指定换行符,它将找到换行符。但这还不是全部。由于您的表达式不测试字符的存在,因此
|
将找到任何没有该字符的字符串。在 前面(?=\|)
、后面添加一个预览块^[^|\r\n]*
。解决方案
请参阅正则表达式示例。
日期的格式是如此不同,以至于很难找到在任何情况下都有效的东西。查看您的数据并找到一些值得关注的东西会更容易。例如,在大多数日期格式中,年份由四位数字组成,如果查看今年的文件,则找到子字符串“2022”就足够了。