我对Python正则表达式有些困惑,无法编写提取特定值的正则表达式。
我要解析的页面包含多个产品ID,格式如下:
\"productId\":\"111111\"
我需要提取所有的值,111111
在这个例子中。
t = "\"productId\":\"111111\""
m = re.match("\W*productId[^:]*:\D*(\d+)", t)
if m:
print m.group(1)
意思是匹配非单词字符 (\W*
),然后是productId
后面跟着非列字符 ([^:]*
) 和一个 :
。然后匹配非数字 (\D*
),匹配并捕获之后的数字 ((\d+)
)。
输出
111111
像这样的内容:
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']
这里的反斜杠可能会增加混淆,因为它们既被(非原始)Python字符串用作转义字符,也被正则表达式语法使用。
这从你发布的格式中提取产品ID:
re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"')
原始字符串r'...'
消除了一层反斜杠转义;使用单引号作为字符串定界符消除了需要转义双引号的需要;最后,反斜杠被加倍(仅一次),因为它们在正则表达式语言中具有特殊含义。
您可以使用正则表达式对象的findall()
方法在某些文本中查找所有匹配项:
re_prodId.findall(text_to_search)
试试这个,
:\\"(\d*)\\"
如果这个不符合您的要求,请提供更多数据示例。