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

我想要

<article stuff
</article>
4

1 回答 1

12

re.MULTILINE实际上并没有按照您希望的方式使您的正则表达式多行。

指定时,模式字符'^'匹配字符串的开头和每行的开头(紧跟在每个换行符之后);并且模式字符'$'在字符串的末尾和每行的末尾(紧接在每个换行符之前)匹配。默认情况下,'^'仅匹配字符串的开头、字符串'$'的结尾以及字符串末尾的换行符(如果有)之前。

re.DOTALL做:

使'.'特殊字符完全匹配任何字符,包括换行符;没有这个标志,'.'将匹配换行符以外的任何内容。

更改flags=re.MULTILINEflags=re.DOTALL,您的正则表达式将起作用。

于 2012-09-12T22:25:20.393 回答