Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Regex findall输出不符合预期_Python_Regex - Fatal编程技术网

Python Regex findall输出不符合预期

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

尝试使用正则表达式提取从.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: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})