【发布时间】:2020-06-10 19:16:26
【问题描述】:
我对 python 还很陌生。我正在尝试使用正则表达式来匹配文件中的特定文本。
我可以提取数据,但一次只能提取一个正则表达式,因为这两个值位于不同的行中,我正在努力将它们放在一起。这几行在文件中一直重复。
[06/05/2020 08:30:16]
othertext <000.000.000.000> xx s
example <000.000.000.000> xx s
我设法打印了一个或其他正则表达式:
[06/05/2020 08:30:16]
或
example <000.000.000.000> xx s
但没有组合成这样的东西:
(timestamp) (text)
[06/05/2020 08:30:16] example <000.000.000.000> xx s
这些是正则表达式
regex = r"^\[\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d\:\d\d\]" #Timestamp
regex = r"(^example\s+.*\<000\.000\.000\.000\>\s+.*$)" # line that contain the text
这是到目前为止的代码,我已经尝试了一个带有另一个条件的辅助 for 循环,但似乎一次只匹配一个正则表达式。
任何指针将不胜感激。
import re
filename = input("Enter the file: ")
regex = r"^\[\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d\:\d\d\]" #Timestamp
with open (filename, "r") as file:
list = []
for line in file:
for match in re.finditer(regex, line, re.S):
match_text = match.group()
list.append(match_text)
print (match_text)
【问题讨论】:
-
是否要将所有行作为时间戳下的单独匹配项进行匹配?或者匹配 1 场比赛中的时间戳,并在第二场比赛中合并所有后续行?
-
你有遵循这种模式的文本块吗?您可以使用前瞻将文本块匹配到块的下一个开头。
-
抱歉,我正在编辑以更清楚地说明我尝试创建两个组匹配并加入结果,但老实说,我不确定这是否是解决此问题的正确方法。跨度>
-
我的意思是时间戳后面有多行。你想要一行,还是匹配时间戳之后的所有行?
-
@Thefourthbird 好的,我知道了!时间戳后面有几行,但我只对一个特定的行感兴趣,要么是行示例,要么是行 othertext,所以理想情况下,结果应该是:Timestamp + line 或尽可能接近。