проблема регулярного выражения Python

1
s = re.sub(r"<style.*?</style>", "", s)

Разве этот код не должен удалять стили в строке s? Почему это не работает? Я пытаюсь удалить следующий код:

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

Любое предложение?

Теги:

1 ответ

6
Лучший ответ

Нет, это обязательно должен быть флаг 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
  • 0
    Да, правильно, я только что вернулся, чтобы сказать, что нашел решение, но вот ты! Хороший ответ!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню