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

21

我对Python正则表达式有些困惑,无法编写提取特定值的正则表达式。

我要解析的页面包含多个产品ID,格式如下:

\"productId\":\"111111\"

我需要提取所有的值,111111 在这个例子中。


你有阅读过关于Python正则表达式的文档吗? - Joel Cornett
1
你是刚接触正则表达式、Python或两者都不熟悉吗?你需要哪方面的帮助?你已经尝试过什么了? - cmd
1
可能是如何在Python中从字符串中提取子字符串?的重复问题。 - Андрей Беньковский
4个回答

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

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

输出

111111

这个不需要是原始字符串吗?或者需要转义反斜杠吗? - Tim MB

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']

我认为这更Pythonic。 :) - skytreader

2

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

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

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

原始字符串r'...'消除了一层反斜杠转义;使用单引号作为字符串定界符消除了需要转义双引号的需要;最后,反斜杠被加倍(仅一次),因为它们在正则表达式语言中具有特殊含义。

您可以使用正则表达式对象的findall()方法在某些文本中查找所有匹配项:

re_prodId.findall(text_to_search)

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

0

试试这个,

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接