从多行fi获取特定文本

2024-04-20 02:55:34 发布

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

考虑到文本文件有多个换行符和空格,我想使用python中的Regex包过滤文件中的某个文本。文件可能有多个数据块,但唯一需要的是带有特定关键字的数据块。在我的问题中,它应该属于一个包含“Route Details”关键字的组。你知道吗

让我们说文件(示例.txt),如下所示。你知道吗

.
.
.
 Host1<-->Host2 Con. ID:         0x0fc2f0d9  (abc123)
  Con. Information:
     [Gw]  Route-Details 
        R-Code:      0xaaaa (1a2) Route-Details
        Router-ID:     0x21       (a4)  [Gw] 
        Path-Code:    0x00e   (15)
        Data: 123-abcd.djsjdkks www.somesite. port 11

Coded info
                   aa aa aa aa aa aa aa aa   1111-aaa
                   aa aa aa aa aa aa aa aa   1111-aaa
.
.
.

这就是我写的

import re
with open("sample.txt", "r") as fl:
    in_file= fl.read()

(re.search('(?<=Route-Details).* Data:', in_file,re.DOTALL).group())

我希望得到这个。你知道吗

123-abcd.djsjdkks www.somesite. port 11

然而,我得到了这个。你知道吗

R-Code:      0xaaaa (1a2) Route-Details
        Router-ID:     0x21       (a4)  [Gw] 
        Path-Code:    0x00e   (15)
        Data:

我想知道我是否可以得到简化和详细的解决方案。 非常感谢你的帮助。你知道吗


Tags: 文件数据retxtiddatacode关键字
3条回答

这将解决这个问题,我有测试它。 它的输出与您预期的相同:

import re
with open("sample.txt", "r") as fl:
    in_file= fl.read()
    print(re.search('(?<=Data: ).* port 11', in_file, re.DOTALL).group())

你可以用积极的眼光去观察和捕捉群体:

re.findall(r'(?<=Data: )(.*?)\n', text)

收益率:

['123-abcd.djsjdkks www.somesite. port 11']

此外,您可以尝试以下操作以包括指定的Route-Details条件:

re.findall(r'(?<=Route-Details).*?(?<=Data: )(.*?)\n', text, re.DOTALL)

有关详细说明,请参见here。另外,re.DOTALL指定.字符将匹配所有字符,包括换行符。你知道吗

我会做一些像

re.search('(?=Data: ).*\n', infile, re.DOTALL).group()

我认为您的问题是表达式试图匹配从“Route Details”到“Data:”的所有内容。你知道吗

希望这有帮助:)

相关问题 更多 >