python - 从多行文件中获取特定文本

标签 python regex regex-lookarounds regex-negation regex-group

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

假设文件(sample.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:

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

最佳答案

您可以使用积极的后视和捕获组:

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 指定 . 字符将匹配所有字符,包括换行符

关于python - 从多行文件中获取特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57224953/

相关文章:

python - 用 matplotlib 绘制 pandas period_range - 设置轴的频率

.net - .NET Regex 类的运算符优先级在哪里记录?

javascript - 在javascript中将字符串分割成句子

php - 正则表达式显示错误

python - 在 Python 中删除字符串中特定子字符串前后的字符

regex - 积极向后看不起作用,但向前看才有效

python - 为替换 split () 而构建的函数的意外行为

python - 使用自动重建索引将 Series 插入 DataFrame

python - 为 Python 3.4 安装 pip - Mac OS X

javascript - 使用 javacsripts new RegExp() 函数的正面前瞻