2013-04-11 45 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的列表。