Python 我无法摆脱我正则表达式中多余的匹配项

Python 我无法摆脱我正则表达式中多余的匹配项,python,regex,Python,Regex,我是python新手,我尝试只从文本文件中提取日期,但当我匹配它们时,这就是结果。我能得到如何摆脱这些的帮助吗? 我的代码: 代码执行输出: None [] None ['2021-02-12'] None [] None [] None [] None [] None [] None [] None [] None [] None ['2021-02-12'] None [] None [] None [] None [] None [] None [] None [] None [] Non

我是python新手,我尝试只从文本文件中提取日期,但当我匹配它们时,这就是结果。我能得到如何摆脱这些的帮助吗? 我的代码:

代码执行输出:

None [] None ['2021-02-12'] None [] None [] None [] None [] None [] None [] None [] None [] None ['2021-02-12'] None [] None [] None [] None [] None [] None [] None [] None [] None ['2021-02-12'] None [] None [] None ['2021-02-12']
wireshark.txt:

所需代码执行输出:

['2021-02-12']
['2021-02-13']
['2021-02-14']

以下是一些希望有用的建议:

你有:

regex=re.matchr\d\d\d\d-\d\d-\d\d,第行 首先,re.match将只返回字符串行开头的匹配。如果希望在字符串中的任何位置找到该模式,则应改用方法re.search。其次,re.match根据匹配是否成功返回匹配对象或无。它不返回正则表达式。因此,命名变量以保存结果regex可能不是最佳选择

其次,正如@fricative甜瓜所提到的,如果您正在使用re.findall逐行处理输入文件,查找该行上的所有匹配项,那么查找该行第一个字符位置的匹配项也没有什么意义。而且,当在行中找不到匹配项时,您不希望打印出空列表。这些更改导致以下代码:

进口稀土 file1=打开'wireshark.txt','r' 对于文件1中的行: marks=re.findallr\d\d\d\d-\d\d-\d\d,第行 如果标记:等于1如果lenmarks:2如果lenmarks!=0: 印刷品 file1.close 请注意,我还添加了一条额外的语句,以便在读完打开的文件时关闭它

您还可以读取整个文件并执行一次搜索:

进口稀土 打开'wireshark.txt','r'作为文件: text=file.read 文件现在自动关闭 marks=re.findallr\d\d\d\d-\d\d-\d\d,text 打印标记显示了我们发现的东西,即使它什么都不是 最后一点:

正则表达式还将在字符串(如11111-11-11和1111-11-111)中查找匹配项。如果要确保匹配的前面和后面没有其他数字,请修改正则表达式以使用负向后看和负向前看断言:

(?<!\d)\d\d\d\d-\d\d-\d\d(?!\d)

请添加wireshark.txt中文本的示例,以便人们能够帮助您使用正则表达式。我们不知道该文件中的文本是什么样子。不知道。时间源目标协议长度信息4 2021-02-12 13:33:12.225989 192.168.1.151 172.217.10.46 TLSv1.2 146应用程序数据,就像这样但是如果继续more@duynguyen用它更新你的问题,而不是评论。你需要在你的问题中提供它,而不是评论。提供文本的剪报,而不是解释。如果您希望得到答案,请提供问题的所有详细信息。请尝试删除regex部分,并且仅在该部分不为空时打印标记。
['2021-02-12']
['2021-02-13']
['2021-02-14']
(?<!\d)\d\d\d\d-\d\d-\d\d(?!\d)