我想在Python中编写一个简单的正则表达式,从HTML中提取数字。HTML示例如下:
Your number is <b>123</b>
现在,我该如何提取“123”,即在字符串“您的号码是”后面第一个加粗文本的内容?
我想在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'
这个正则表达式在字符串中寻找一个或多个连续的数字。
请注意,在这种特定情况下,我们“知道”会有数字序列,否则您将需要测试re.search()
的返回值,以确保m
包含有效的引用,否则m.group()
将导致AttributeError:
异常。
当然,如果您要处理大量的HTML,建议您认真考虑BeautifulSoup - 它专门用于处理HTML等内容。整个想法是使用BeautifulSoup避免使用字符串操作或正则表达式进行手动解析。
re.search()
的返回值也不是必要的,但应该这样做。 - Levonimport re
x = 'Your number is <b>123</b>'
re.search('(?<=Your number is )<b>(\d+)</b>',x).group(0)
这段代码搜索的是紧随字符串“Your number is”之后的数字。
.group(1)
吗? - DSMimport re
print re.search(r'(\d+)', 'Your number is <b>123</b>').group(0)
re.search(r"\d+",text)
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]
。当有多个分组时应该使用 [分组索引]
。
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)
要将其提取为Python列表,可以使用findall
>>> import re
>>> string = 'Your number is <b>123</b>'
>>> pattern = '\d+'
>>> re.findall(pattern,string)
['123']
>>>
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())
import re
x = 'Your number is <b>123</b>'
output = re.search('(?<=Your number is )<b>(\d+)</b>',x).group(1)
print(output)