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