使用Fileinput模块和正则表达式替换的Python脚本,包含\n(多行)

使用Fileinput模块和正则表达式替换的Python脚本,包含\n(多行),python,regex,readline,Python,Regex,Readline,全部, 我对Python比较陌生,但已经广泛使用了其他脚本语言和正则表达式。我需要一个脚本,将打开一个文件,寻找一个正则表达式模式,替换模式和关闭文件。我发现下面的脚本工作得很好,但是,我不知道fileinput.input命令中的for行是否可以容纳超过一行的正则表达式模式,即正则表达式包含回车符。在我的例子中,它包括两行。我的测试文件read_it.txt如下所示 read_it.txt只包含3行 阿巴 疾病控制中心 EFE 该脚本用于打开文件,识别在2行以上看到的模式ABA\nCDC,然后

全部,

我对Python比较陌生,但已经广泛使用了其他脚本语言和正则表达式。我需要一个脚本,将打开一个文件,寻找一个正则表达式模式,替换模式和关闭文件。我发现下面的脚本工作得很好,但是,我不知道fileinput.input命令中的for行是否可以容纳超过一行的正则表达式模式,即正则表达式包含回车符。在我的例子中,它包括两行。我的测试文件read_it.txt如下所示

read_it.txt只包含3行 阿巴 疾病控制中心 EFE

该脚本用于打开文件,识别在2行以上看到的模式ABA\nCDC,然后将其替换为单词TEST

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

了解这个问题的答案将大大有助于使用Python脚本解析文本文件并动态修改它们。我相信,但不确定是否有更好的Python结构仍然允许正则表达式搜索。因此,问题是:

1我是否需要更改现有脚本中的某些内容,以更改for line命令的行为以匹配多行正则表达式模式? 2或者我需要一个更适合多行搜索的不同Python脚本吗

有些东西可能会有帮助,但我目前不知道如何写:

1文件输入读取行选项。 2在多行表达式中添加?m

请帮忙

布伦特

剧本 2在多行表达式中添加?m

可以通过在re.sub中添加re.M或flags=re.MULTILINE作为参数来完成此操作

示例:-

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


请注意,上面的格式化使ABA CDC EFE看起来好像都在我的文件中的同一行上。他们不是:ABA在第一线,CDC在第二线,EFE在第三线。我在上面尝试的表达式替换的结果应该在第一行返回TEST,在第二行返回EFE,在第三行返回nothing。您希望您的程序识别模式还是简单的固定字符串?您试图替换什么?我想我正在尝试替换模式。对于我们的示例,更简单的模式是3个字母ABA和换行符。它将作为此ABA写入正则表达式中\n。然后我想用字符串say TEST替换它。结果是,我的文件将发生变化,文件中少了一行,文本ABA将被TEST替换。希望这能说明问题。谢谢,抱歉耽搁了。我两种方法都试过,但都不管用。这是最后一次尝试。在其中,我只是尝试匹配ABA\n,但它不起作用。我确实相信读取文件的for line-in-file方法是个问题,但我知道没有其他方法可以使用Python读取文件。有什么想法吗?在fileinput.input'C:\\Python34\\read\u it.txt',inplace=1:line=re.subr'ABA\n',r'test',line.rstrip,flags=re.MULTILINE printline
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)