Python Regex findall输出不符合预期
尝试使用正则表达式提取从.txt文件读取的部分文本。然而,我的方法似乎在某些特定的方面失败了 下面是输入文本的3行Python Regex findall输出不符合预期,python,regex,Python,Regex,尝试使用正则表达式提取从.txt文件读取的部分文本。然而,我的方法似乎在某些特定的方面失败了 下面是输入文本的3行 [2019/07/11 18:52:25.391] Receive : <- AI (Req No. 711185105702666 ) Message from : cop10 [2019/07/11 18:52:25.391] Note : Response that is not being sent ... cop10 [2019/07/11 18:52:2
[2019/07/11 18:52:25.391] Receive : <- AI (Req No. 711185105702666 ) Message from : cop10
[2019/07/11 18:52:25.391] Note : Response that is not being sent ... cop10
[2019/07/11 18:52:25.393] ★Err : subargs[0] : IBSDK_7776
对于输入文本中的第1行和第2行,输出与预期一致,即提取文本的列表
下面显示的是第1行的输出
“matches is['Receive:最后一行不匹配的原因是最后一行之后没有换行符 如果要保留当前模式,可以断言字符串的结尾
$
您的代码可能看起来像
regex = r"\[.{23}] ?(.{1,8}:.{1,12}).*$"
当前模式不考虑时间戳格式,它匹配任何字符的23倍,除了[
和]
之间的换行符
您可以更新模式以匹配当前的时间戳格式(它不会验证时间戳),在之后使用否定字符类[^:::+:
进行匹配,直到:
为止,或者在捕获组之后忽略匹配:
\[\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3}] ?([^:]+:.{1,12})
使用-问题始于
:
之后。进一步搜索发现…最后一行不是以\n
结尾。删除\n
甚至整个*\n
;)你能包括你试图捕获的实际输出吗?正如@h4z3所提到的,这里是一个演示。在末尾添加新行将捕获最后一行答案有助于解决这个问题吗?
\[\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3}] ?([^:]+:.{1,12})