49

我想用 Python 编写一个简单的正则表达式,从 HTML 中提取一个数字。HTML 示例如下:

Your number is <b>123</b>

现在,如何提取“123”,即字符串“Your number is”之后的第一个粗体文本的内容?

4

10 回答 10

63
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]
于 2012-06-23T16:18:38.393 回答
24

鉴于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 的整个想法是避免使用字符串操作或正则表达式进行“手动”解析。

于 2012-06-23T16:15:11.373 回答
11
import re
x = 'Your number is <b>123</b>'
re.search('(?<=Your number is )<b>(\d+)</b>',x).group(0)

这将搜索 'Your number is' 字符串后面的数字

于 2012-06-23T16:20:55.943 回答
5
import re
print re.search(r'(\d+)', 'Your number is <b>123</b>').group(0)
于 2014-02-17T19:20:11.170 回答
4

最简单的方法就是提取数字(数字)

re.search(r"\d+",text)
于 2016-06-22T10:45:26.773 回答
2
val="Your number is <b>123</b>"

选项1

m=re.search(r'(<.*?>)(\d+)(<.*?>)',val)

m.group(2)

选项:2

re.sub(r'([\s\S]+)(<.*?>)(\d+)(<.*?>)',r'\3',val)
于 2015-07-07T11:55:00.543 回答
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]时应使用。

于 2018-06-14T12:24:46.763 回答
1

要提取为 python 列表,您可以使用findall

>>> import re
>>> string = 'Your number is <b>123</b>'
>>> pattern = '\d+'
>>> re.findall(pattern,string)
['123']
>>>
于 2019-11-25T12:31:44.950 回答
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())
于 2018-10-03T21:03:20.283 回答
0
import re
x = 'Your number is <b>123</b>'
output = re.search('(?<=Your number is )<b>(\d+)</b>',x).group(1)
print(output)
于 2021-05-17T13:20:08.180 回答