Ответ 1
import re
m = re.search("Your number is <b>(\d+)</b>",
"xxx Your number is <b>123</b> fdjsk")
if m:
print m.groups()[0]
Я хочу написать простое регулярное выражение в Python, которое извлекает число из HTML. Образец HTML выглядит следующим образом:
Your number is <b>123</b>
Теперь, как я могу извлечь "123", т.е. содержимое первого жирного текста после строки "Ваш номер"?
import re
m = re.search("Your number is <b>(\d+)</b>",
"xxx Your number is <b>123</b> fdjsk")
if m:
print m.groups()[0]
Учитывая s = "Your number is <b>123</b>"
, тогда:
import re
m = re.search(r"\d+", s)
будет работать и даст вам
m.group()
'123'
Регулярное выражение ищет в вашей строке 1 или более последовательных цифр.
Обратите внимание, что в этом конкретном случае мы знали, что будет числовая последовательность, иначе вам нужно будет проверить возвращаемое значение re.search()
, чтобы убедиться, что m
содержит действительную ссылку, иначе m.group()
будет в исключении AttributeError:
.
Конечно, если вы собираетесь обрабатывать много HTML, вы хотите серьезно взглянуть на BeautifulSoup - это означало для этого и многое другое. Вся идея с BeautifulSoup заключается в том, чтобы избежать "ручного" разбора с помощью строковых операндов или регулярных выражений.
import re
x = 'Your number is <b>123</b>'
re.search('(?<=Your number is )<b>(\d+)</b>',x).group(0)
это ищет номер, который следует за строкой "Ваш номер"
import re
print re.search(r'(\d+)', 'Your number is <b>123</b>').group(0)
Самый простой способ - просто извлечь цифру (число)
re.search(r"\d+",text)
val="Your number is <b>123</b>"
m=re.search(r'(<.*?>)(\d+)(<.*?>)',val)
m.group(2)
re.sub(r'([\s\S]+)(<.*?>)(\d+)(<.*?>)',r'\3',val)