python正则表达式问题

Sha*_*kan 1 python regex

s = re.sub(r"<style.*?</style>", "", s)
Run Code Online (Sandbox Code Playgroud)

这段代码不应该删除s字符串中的样式吗?为什么不起作用?我想删除以下代码:

<style type="text/css">
body { ... }
</style>
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

eyq*_*uem 6

不,这是必要的re.DOTALL标志!

re.DOTALL
制作'.' 特殊字符匹配任何字符,包括换行符; 没有这个标志,'.' 将匹配除换行符之外的任何内容.

http://docs.python.org/library/re.html#re.DOTALL

编辑

在某些情况下,可能需要在字符串的区域中具有匹配所有字符(包括换行符)的点,并且在sting的另一个区域中具有仅匹配非换行符的点.但是使用标志re.DOTALL不允许这样做.

在这种情况下,知道以下技巧是有用的:使用[\ s\S]来表示每个字符

import re

s = '''alhambra
<style type="text/css">
body { ... }
</style>
toromizuXXXXXXXX
YYYYYYYYYYYYYY'''
print s,'\n'

regx = re.compile("<style[\s\S]*?</style>|(?<=ro)mizu.+")

s = regx.sub('AAA',s)
print s
Run Code Online (Sandbox Code Playgroud)

结果

alhambra
<style type="text/css">
body { ... }
</style>
toromizuXXXXXXXX
YYYYYYYYYYYYYY 

alhambra
AAA
toroAAA
YYYYYYYYYYYYYY
Run Code Online (Sandbox Code Playgroud)