2013-04-11 46 views
6

我在使用正则表达式来提取特定值时遇到了一些麻烦,使用Python正则表达式提取数据

我试图解析页面有许多productIds的其出现在以下格式

\"productId\":\"111111\" 

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

+0

你读过[上蟒的正则表达式文档】(http://docs.python.org/2/library/re.html)? – 2013-04-11 20:39:06

+1

难道你是新来的正则表达式,Python或两者?你需要哪部分帮助?你有什么尝试? – cmd 2013-04-11 20:41:06

+1

[如何从Python中的字符串中提取子字符串?]可能的重复(http://stackoverflow.com/questions/4666973/how-to-extract-a-substring-from-inside-a-string-in -python) – 2015-11-17 17:11:21

回答

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

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

输出

111111 
0

试试这个,

​​

给您的数据更多的例子,如果你想要的东西,这并不这样做。

7

是这样的:

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

我觉得这更多Pythonic。 :) – skytreader 2015-06-02 08:20:00

0

的反斜线这里可能会让人困惑,因为它们被用作均由(非原始)Python字符串和正则表达式的语法转义字符。

此提取从您发布的格式的产品ID:

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

原始字符串r'...'用反斜杠一级摒弃;使用单引号作为字符串分隔符可避免使用双引号;最后backslashe加倍(只有一次),因为它们在正则表达式语言中的特殊含义。

可以使用RegExp对象的findall()方法来查找所有匹配的一些文字:

re_prodId.findall(text_to_search) 

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