使用Python正则表达式提取数据

时间:2013-04-11 20:36:17

标签: python regex parsing

我在围绕Python正则表达式时遇到一些麻烦,想出一个正则表达式来提取特定的值。

我尝试解析的页面有许多productIds,它们以下列格式显示

\"productId\":\"111111\"

在这种情况下,我需要提取所有值111111

4 个答案:

答案 0 :(得分:19)

t = "\"productId\":\"111111\""
m = re.match("\W*productId[^:]*:\D*(\d+)", t)
if m:
    print m.group(1)

意味着匹配非单词字符(\W*),然后是productId,后跟非列字符([^:]*)和:。然后匹配非数字(\D*)并匹配并捕获以下数字((\d+))。

<强>输出

111111

答案 1 :(得分:9)

类似的东西:

In [13]: s=r'\"productId\":\"111111\"'

In [14]: print s
\"productId\":\"111111\"

In [15]: import re

In [16]: re.findall(r'\d+', s)
Out[16]: ['111111']

答案 2 :(得分:1)

这里的反斜杠可能会增加混乱,因为它们被(非原始)Python字符串和regexp语法用作转义字符。

这会从您发布的格式中提取产品ID:

re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"')

原始字符串r'...'取消了一级反斜杠转义;使用单引号作为字符串分隔符不需要转义双引号;最后,由于它们在正则表达式语言中的特殊含义,后面加倍(只有一次)。

您可以使用regexp对象的findall()方法查找某些文本中的所有匹配项:

re_prodId.findall(text_to_search)

这将返回所有产品ID的列表。

答案 3 :(得分:0)

试试这个,

 :\\"(\d*)\\"

如果这不符合您的要求,请提供更多数据示例。