s = re.sub(r"<style.*?</style>", "", s)
这段代码不是应该删除 s 字符串中的样式吗?为什么它不起作用?我正在尝试删除以下代码:
<style type="text/css">
body { ... }
</style>
有什么建议吗?
请您参考如下方法:
不,这是必需的 re.DOTALL 标志!
re.DOTALL
制作“。”特殊字符完全匹配任何字符,包括换行符;没有这个标志,'。'将匹配除换行符之外的任何内容。
http://docs.python.org/library/re.html#re.DOTALL
编辑
在某些情况下,可能需要在字符串的一个区域中有一个点匹配所有字符(包括换行符),而在字符串的另一个区域中有一个点仅匹配非换行符。但是使用标志 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
结果
alhambra
<style type="text/css">
body { ... }
</style>
toromizuXXXXXXXX
YYYYYYYYYYYYYY
alhambra
AAA
toroAAA
YYYYYYYYYYYYYY
