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

Posted

技术标签:

【中文标题】使用 Python 正则表达式提取数据【英文标题】:Extracting Data with Python Regular Expressions 【发布时间】:2013-04-04 05:10:17 【问题描述】:

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

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

\"productId\":\"111111\"

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

【问题讨论】:

你读过documentation on python regular expressions吗? 您是正则表达式、python 还是两者的新手?您需要帮助哪一部分?你试过什么? how to extract a substring from inside a string in Python?的可能重复 【参考方案1】:
t = "\"productId\":\"111111\""
m = re.match("\W*productId[^:]*:\D*(\d+)", t)
if m:
    print m.group(1)

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

输出

111111

【讨论】:

这不需要是原始字符串,还是不需要转义反斜杠?【参考方案2】:

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

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

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

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

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

re_prodId.findall(text_to_search)

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

【讨论】:

【参考方案3】:

类似这样的:

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。 :)【参考方案4】:

试试这个,

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

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

【讨论】:

以上是关于使用 Python 正则表达式提取数据的主要内容,如果未能解决你的问题,请参考以下文章

在python中使用正则表达式提取日期

python利用正则表达式提取字符串

如何在 Python 中使用正则表达式从同一个字符串中提取多个值?

python正则表达式提取字符串

用python正则表达式提取字符串

使用正则表达式使用python 2.7提取电子邮件接收者[重复]