如何在使用python中的正则表达式确定范围的文件中删除行?
我试图通过删除不需要的行来清理一系列文本文件。我想删除从与Regex1匹配的行开始的行,并继续删除,直到找到与Regex2匹配的行。我需要使用python来实现这一点。我已经使用sed命令完成了这项工作,比如如何在使用python中的正则表达式确定范围的文件中删除行?,python,regex,lines,Python,Regex,Lines,我试图通过删除不需要的行来清理一系列文本文件。我想删除从与Regex1匹配的行开始的行,并继续删除,直到找到与Regex2匹配的行。我需要使用python来实现这一点。我已经使用sed命令完成了这项工作,比如 sed-r'/regex1/,/regex2/d' 运气不错,但我需要一些可以在Windows机器上运行的东西。另外,我希望整个解决方案使用一种语言,而不是shell和python脚本之间的管道。有人有什么想法或帖子可以告诉我吗 您可以使用使匹配换行符: import re patter
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”。如果他们中的一个解决了你的问题——正如你所说,它已经解决了——只需点击它,明确它是你问题的正确答案。事实上,试着在你问的每一个问题上都这样做,你得到了一个可以接受的答案:)如果你的文件真的很大,不要用这个。如果你的文件真的很大,不要用这个。