Python脚本使用Fileinput模块和包含\ n(多行)的Regex替换

时间:2015-04-02 19:34:52

标签: python regex readline

所有

我相对较新的Python,但广泛使用其他脚本语言与REGEX。我需要一个脚本来打开文件,查找REGEX模式,替换模式并关闭文件。我发现下面的脚本效果很好,但是,我不知道fileinput.input"中的"是否为行?命令可以容纳超过单行的正则表达式模式(即正则表达式包括回车符)。在我的例子中,它涵盖了2行。我的测试文件read_it.txt看起来像这样

read_it.txt(仅包含3行) ABA CDC EFE

该脚本用于打开文件,识别超过2行的ABA \ nCDC模式,然后将其替换为TEST一词。

如果模式替换成功,则文件应如下所示,现在只包含2行: 测试 EFE

知道答案将有助于使用Python脚本解析文本文件并动态修改它们。我相信,但不确定,可能有更好的Python构造仍然允许REGEX搜索。所以问题是:

1)我是否需要在现有脚本中更改某些内容,以改变" for line"命令匹配多行REGEX模式? 2)或者我是否需要一个更适合多行搜索的不同Python脚本?

有些事情可能会有所帮助,但我目前不知道如何写它们是:

1)fileinput" readline"选项。 2)在多线

的表达式中添加(?m)

请帮忙!

布伦特

SCRIPT

import sys
import fileinput
import re
for line in fileinput.input('C:\\Python34\\read_it.txt', inplace=1):
    line = re.sub(r'A(B)A$\nCDC', r'TEST', line.rstrip())
    print(line)

1 个答案:

答案 0 :(得分:0)

  

2)在多线

的表达式中添加(?m)

您可以在re.M

中添加flags=re.MULTILINEre.sub作为参数来执行此操作

示例: -

re.sub(r'A(B)A$\nCDC', r'TEST', line.rstrip(), re.M)

re.sub(r'A(B)A$\nCDC', r'TEST', line.rstrip(), flags=re.MULTILINE)