【问题标题】:Match pattern on new lines after first pattern is found?找到第一个模式后在新行上匹配模式?
【发布时间】:2022-01-05 05:42:07
【问题描述】:

我有以下代表性数据:

Lots of text, lots of text
PATTERN2
PATTERN2
text PATTERN1 text
text
text
..
..
text
PATTERN2
PATTERN2
PATTERN2
PATTERN2
PATTERN2
..
..
PATTERN2

基本上我想捕获 PATTERN2 的所有实例,但只有在 PATTERN1 出现在文件中之后。

PATTERN1 是几个字符,而 PATTERN2 以时间戳 (HH:MM:SS.sss) 开头,我需要在找到 PATTERN2 时捕获整行。另外值得注意的是 PATTERN2 出现在整个 txt 文件中,但我只想在找到 PATTERN1 之后匹配 PATTERN2。

我尝试了各种正则表达式(我是新手,正在摸索)但无济于事,我正在使用https://regexr.com/https://regex101.com 进行测试,但最终它将用于Python 脚本。

任何帮助将不胜感激!

【问题讨论】:

标签: python regex


【解决方案1】:

一种方法可以明智地使用基本字符串函数:

inp = """Lots of text, lots of text
PATTERN2
PATTERN2
text PATTERN1 text
text
text
..
..
text
PATTERN2
PATTERN2
PATTERN2
PATTERN2
PATTERN2
..
..
PATTERN2"""

matches = []
if re.search(r'\bPATTERN1\b', inp):
    text = re.split(r'\bPATTERN1\b', inp, 1)[1]
    matches = re.findall(r'\bPATTERN2\b', text)

print(matches)
# ['PATTERN2', 'PATTERN2', 'PATTERN2', 'PATTERN2', 'PATTERN2', 'PATTERN2']

这里我们首先检查输入文本是否包含PATTERN1 标记。如果不是,则没有匹配项,否则,我们进行正则表达式拆分以查找出现在第一个 PATTERN1 之后 的文本。最后,re.findall 查找此目标文本中出现的所有 PATTERN1

【讨论】:

  • 成功了!感谢您的帮助和指导!
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
相关资源
最近更新 更多