Skip to main content
 首页 » 编程设计

python正则表达式问题

2025年05月04日2498°冷暖

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