Python正则表达式示例

时间:2012-06-23 16:13:03

标签: python regex

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

Your number is <b>123</b>

现在我如何提取“123”,即字符串“你的号码是”后的第一个粗体文字的内容?

10 个答案:

答案 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>"

选项:1

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

m.group(2)

选项: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)