Python 正则表达式匹配任何内容

9

我的正则表达式对字符串没有任何作用。

Python

data = 'random\n<article stuff\n</article>random stuff'
datareg = re.sub(r'.*<article(.*)</article>.*', r'<article\1</article>', data, flags=re.MULTILINE)
print datareg

我明白了

random
<article stuff
</article>random stuff

i want

<article stuff
</article>

2
啊,拜托了:又是Cthulhu Parsing - pillmuncher
1
@pillmuncher:看起来像是格式不正确的HTML,所以我怀疑HTML解析器很难处理它。 - Blender
1
@Blender:我认为你是对的。但是替换似乎也不是有效的XML。我想知道,人们需要破损的XML有什么用? - pillmuncher
1个回答

12

re.MULTILINE并不能按照你想要的方式使你的正则表达式跨行匹配。

当指定该标志时,模式字符'^'会匹配字符串的开头和每一行的开头(紧接着每个换行符);模式字符'$'会匹配字符串的末尾和每一行的末尾(紧接着每个换行符之前)。默认情况下,'^'只匹配字符串的开头,而'$'仅匹配字符串的末尾和紧随字符串末尾的换行符(如果有)之前。

re.DOTALL可以:

'.'特殊字符匹配任何字符,包括换行符;如果没有此标志,则'.'将匹配除换行符外的任何字符。

flags=re.MULTILINE更改为flags=re.DOTALL,即可使你的正则表达式正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接