Python: заменить регулярным выражением
Мне нужно заменить часть строки. Я просматривал документацию на Python и нашел re.sub.
import re
s = '<textarea id="Foo"></textarea>'
output = re.sub(r'<textarea.*>(.*)</textarea>', 'Bar', s)
print output
>>>'Bar'
Я ожидал, что это напечатает '<textarea id="Foo">Bar</textarea>'
, а не "bar".
Может ли кто-нибудь сказать мне, что я сделал неправильно?
Ответы
Ответ 1
Вместо того, чтобы захватить часть, которую вы хотите заменить, вы можете захватить части, которые хотите сохранить, а затем ссылаться на них, используя ссылку \1
, чтобы включить их в замещаемую строку.
Попробуйте это вместо:
output = re.sub(r'(<textarea.*>).*(</textarea>)', r'\1Bar\2', s)
Кроме того, если предположить, что это HTML, вы должны рассмотреть использование парсера HTML для этой задачи, например Beautiful Soup.
Ответ 2
Или вы могли бы просто использовать функцию поиска:
match=re.search(r'(<textarea.*>).*(</textarea>)', s)
output = match.group(1)+'bar'+match.group(2)
print output
>>>'<textarea id="Foo">bar</textarea>'