Python中的Regex:从具有重复相似版本的文本中提取多行部分

2024-04-25 07:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

提前谢谢你的帮助。我使用Python正则表达式从具有以下布局的文本中提取部分:

(A lot of information)

time:    150

C-FXY

-- information ---

E-END

(A lot of information)

time:   5000

C-FXY

**--- INFORMATION I WANT TO EXTRACT ---**

E-END

(A lot of information)

time:  13000

C-FXY

-- information ---

E-END

(A lot of information)

我需要从对应于5000的时间点提取C-FXY和E-END之间的所有内容。为此,我使用以下python3.6语句:

^{pr2}$

不幸的是,我得到的输出是C-FXY和E-END之间的相同版本,但是从文本的13000个时间点来看,不是我想要的时间:5000。在

任何帮助都将不胜感激。:)


Tags: ofto文本内容informationtime时间extract
2条回答

导致错误的原因是您的regex在time部分和C-FXY之间包含一个贪婪的.*。所以它吃掉了最后一组的所有东西。在

在这里使用非贪婪版本就足够了:

text_part = re.search(r'time.*'+time_step+'.*?C-FXY(.*?)E-END', text, re.DOTALL).group(1)

无论如何,我不会在这里使用对整个文件的多行搜索,但我只会逐行读取文件,直到time: 5000,然后再到{}一个,从那里存储任何内容到C-END一个,并在那里结束处理。在

可以使用以下代码解决它:

import re

text = """(A lot of information)

time:    150

C-FXY

  information  -

E-END

(A lot of information)

time:   5000

C-FXY

** - INFORMATION I WANT TO EXTRACT  -**

E-END

(A lot of information)

time:  13000

C-FXY

  information  -

E-END

(A lot of information)"""

pattern = re.compile(r"C-FXY(.*?)E-END")

results = re.findall(r"C-FXY(.*?)E-END", text, re.DOTALL)

现在,如果打印results

^{pr2}$

输出将是:

Resultado 0:
'

  information  -

'
Resultado 1:
'

** - INFORMATION I WANT TO EXTRACT  -**

'
Resultado 2:
'

  information  -

'

相关问题 更多 >