我想在Python中编写一个简单的正则表达式,从HTML中提取一个数字。 HTML示例如下:
Your number is <b>123</b>
现在我如何提取“123”,即字符串“你的号码是”后的第一个粗体文字的内容?
答案 0 :(得分:54)
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]
答案 1 :(得分:22)
给定s = "Your number is <b>123</b>"
然后:
import re
m = re.search(r"\d+", s)
会工作并给你
m.group()
'123'
正则表达式在字符串中查找一个或多个连续数字。
请注意,在这种特定情况下,我们知道会有数字序列,否则您必须测试re.search()
的返回值以确保m
包含有效的引用,否则m.group()
将导致AttributeError:
异常。
当然,如果您要处理大量HTML,您需要认真考虑BeautifulSoup - 这意味着它还有更多。 BeautifulSoup的整个想法是避免使用字符串操作或regular expressions进行“手动”解析。
答案 2 :(得分:10)
import re
x = 'Your number is <b>123</b>'
re.search('(?<=Your number is )<b>(\d+)</b>',x).group(0)
这将搜索“您的号码为”字符串
后面的数字答案 3 :(得分:5)
import re
print re.search(r'(\d+)', 'Your number is <b>123</b>').group(0)
答案 4 :(得分:4)
最简单的方法就是提取数字(数字)
re.search(r"\d+",text)
答案 5 :(得分:2)
import re
found = re.search("your number is <b>(\d+)</b>", "something.... Your number is <b>123</b> something...")
if found:
print found.group()[0]
这里(\ d +)是分组,因为只使用了一个组[0]
。如果有多个分组,则应使用[grouping index]
。
答案 6 :(得分:1)
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)
答案 7 :(得分:0)
您可以使用以下示例解决问题:
import re
search = re.search(r"\d+",text).group(0) #returns the number that is matched in the text
print("Starting Index Of Digit", search.start())
print("Ending Index Of Digit:", search.end())
答案 8 :(得分:0)
要提取为python列表,可以使用findall
>>> import re
>>> string = 'Your number is <b>123</b>'
>>> pattern = '\d+'
>>> re.findall(pattern,string)
['123']
>>>
答案 9 :(得分:-1)
import re
x = 'Your number is <b>123</b>'
output = re.search('(?<=Your number is )<b>(\d+)</b>',x).group(1)
print(output)