Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用python中的正则表达式确定范围的文件中删除行?_Python_Regex_Lines - Fatal编程技术网

如何在使用python中的正则表达式确定范围的文件中删除行?

如何在使用python中的正则表达式确定范围的文件中删除行?,python,regex,lines,Python,Regex,Lines,我试图通过删除不需要的行来清理一系列文本文件。我想删除从与Regex1匹配的行开始的行,并继续删除,直到找到与Regex2匹配的行。我需要使用python来实现这一点。我已经使用sed命令完成了这项工作,比如 sed-r'/regex1/,/regex2/d' 运气不错,但我需要一些可以在Windows机器上运行的东西。另外,我希望整个解决方案使用一种语言,而不是shell和python脚本之间的管道。有人有什么想法或帖子可以告诉我吗 您可以使用使匹配换行符: import re patter

我试图通过删除不需要的行来清理一系列文本文件。我想删除从与Regex1匹配的行开始的行,并继续删除,直到找到与Regex2匹配的行。我需要使用python来实现这一点。我已经使用sed命令完成了这项工作,比如

sed-r'/regex1/,/regex2/d'

运气不错,但我需要一些可以在Windows机器上运行的东西。另外,我希望整个解决方案使用一种语言,而不是shell和python脚本之间的管道。有人有什么想法或帖子可以告诉我吗

您可以使用使
匹配换行符:

import re

pattern = re.compile(r"regex1.*?regex2", re.DOTALL)
然后,您可以使用
pattern.sub(“,data)
删除行。

您可以使用使
匹配换行:

import re

pattern = re.compile(r"regex1.*?regex2", re.DOTALL)
import sys,re

reg_start = 'reg1'
reg_end = 'reg2'

to_print = 1

for line in sys.stdin.readlines():
    if re.search(reg_start, line):
        to_print = 0
    elif re.search(reg_end, line):
        to_print = 1

    if to_print:
        print line,

然后可以使用
pattern.sub(“,data)
删除行。

在perl中,有一个触发器操作符可以用作:

import sys,re

reg_start = 'reg1'
reg_end = 'reg2'

to_print = 1

for line in sys.stdin.readlines():
    if re.search(reg_start, line):
        to_print = 0
    elif re.search(reg_end, line):
        to_print = 1

    if to_print:
        print line,
perl -ne "print unless /regex1/ .. /regex2/" file

您可以将其转换为python,因为在perl中有一个触发器操作符可以用作:

perl -ne "print unless /regex1/ .. /regex2/" file

您可以将其转换为python,因为它的解释是:您可以使用cygwin在windows上运行sed。B) 您可能想看看python的
re
包。建议您:下面每个答案的左边都有一个大“V”。如果他们中的一个解决了你的问题——正如你所说,它已经解决了——只需点击它,明确它是你问题的正确答案。事实上,试着在你问的每个问题上都这样做,你得到了一个可以接受的答案:)A)你可以使用cygwin在windows上运行sed。B) 您可能想看看python的
re
包。建议您:下面每个答案的左边都有一个大“V”。如果他们中的一个解决了你的问题——正如你所说,它已经解决了——只需点击它,明确它是你问题的正确答案。事实上,试着在你问的每一个问题上都这样做,你得到了一个可以接受的答案:)如果你的文件真的很大,不要用这个。如果你的文件真的很大,不要用这个。