我试图用!if和!endif解析文本文档。我希望文本没有!if,!endif和它们之间的文本。
例如:
text
!if
text1
!endif
text2
我想输出= text + text2 + ..
我试过这样的事情re.findall(r'((^(!if。*!endif))+',text)。但它似乎对我不起作用。
答案 0 :(得分:4)
你的正则表达式是:
^!if$.*?^!endif$\s+
这说:
^ - Match the beginning of a line (because of the re.M flag)
!if - Match !
$ - Match the end of a line (because of the re.M flag)
.*? - Match any number of characters (non-greedy) (includes line breaks, because of the re.S flag)
^ - Match the beginning of a line (because of the re.M flag)
!endif - Match !endif
$ - Match the end of a line (because of the re.M flag)
\s+ - Match one or more whitespace characters
所以,你应该能够像这样使用它,用空字符串替换所有出现的上述正则表达式(无):
import re
s = "text\n!if\ntext1\n!endif\ntext2"
s = re.sub("^!if$.*?^!endif$\s+", "", s, flags=re.S | re.M)
print s
text
text2
请注意,这明确要求!if
和!endif
分开。如果这不是必需的,您可以从正则表达式的中间删除$
和^
锚点。
^!if.*?!endif$\s+
答案 1 :(得分:0)
我可以帮助sed:
sed '/^if$/,/^endif$/ d'
以下是sed使用的算法: