【问题标题】:Reading a text file and combinig 2 lines into one using a regular expression读取文本文件并使用正则表达式将 2 行合并为一行
【发布时间】: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 或尽可能接近。

标签: python regex


【解决方案1】:

您可以使用这种类型的正则表达式一次性匹配类似于此的文本块:

(^\[\d\d\/\d\d\/\d\d\d\d[ ]+\d\d:\d\d:\d\d\])\s+[\s\S]*?(^example.*)

Demo

但是,所有文件的文本都需要“吞咽”才能这样做。

正则表达式的关键元素:

[\s\S]*?
   ^                idiomatically, this matches all characters in regex
      ^             zero or more
       ^            not greedily or the rest of the text will match skipping 
                    the (^example.*) part

【讨论】:

  • 好吧,正则表达式让我大吃一惊。我将其作为两个匹配的表达式来处理,然后加入,我变得非常沮丧。非常感谢!我将使用这种方法作为文本块在文件中始终如一地重复,我想我可以从那里使用它。再次感谢一百万!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2015-02-21
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多