13

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

我要解析的页面有许多 productId,它们以以下格式显示

\"productId\":\"111111\"

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

4

4 回答 4

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

意思是匹配非单词字符 ( \W*),然后productId是非列字符 ( [^:]*) 和 a :。然后匹配非数字 ( \D*) 并匹配并捕获后面的数字 ( (\d+))。

输出

111111
于 2013-04-11T20:54:09.787 回答
15

像这样的东西:

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']
于 2013-04-11T20:40:27.323 回答
2

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

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

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

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

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

re_prodId.findall(text_to_search)

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

于 2013-04-11T20:43:15.093 回答
0

尝试这个,

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

如果这不能满足您的要求,请提供更多数据示例。

于 2013-04-11T20:40:09.850 回答