2014-09-06 116 views
-5

如果下面是字符串:定義正則表達式

"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz" 

我想只提取以下'AN : ''Acnt No : '的字母數字字符串。

我想要一個Python腳本的正則表達式。

+5

歡迎來到[so]。這裏的問題應該顯示研究努力或嘗試。請參加__ [導遊] __。 – Unihedron 2014-09-06 16:57:39

+0

爲什麼使用正則表達式?只需拆分「」並採取結果列表的適當元素。 – 2014-09-06 17:16:16

回答

3

我會用findall這個..

>>> import re 
>>> s = 'AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz' 
>>> re.findall(r'\b(?:AN|Acnt No) : (\w+)', s) 
['GSHJ488GL67', 'cgk379gu'] 

說明

\b   # the boundary between a word character and not a word character 
(?:  # group, but do not capture: 
    AN  # 'AN' 
|   # OR 
    Acnt No # 'Acnt No' 
)   # end of grouping 
:   # ' : ' 
(   # group and capture to \1: 
    \w+  # word characters (a-z, A-Z, 0-9, _) (1 or more times) 
)   # end of \1 
+0

這會打印AN和Acnt No .. – user17 2014-09-07 07:51:33

0

也需要包含其他值。我們也可以將字符串與dict,然後通過各種按鍵叫他們

import re                 
import json                 
data = "AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz" 
data = re.sub("\s*:\s*(\w+)\s*", r'":"\1" ,"', data)       
data = '{"'+data[:-3]+'}'             
mapping = json.loads(data)             
print mapping                
print mapping["Acnt No"]              
print mapping["AN"] 

輸出

{'Customer': 'sh3893', 'Acnt No': 'cgk379gu', 'Name': 'xyz', 'AN': 'GSHJ488GL67'} 
cgk379gu 
GSHJ488GL67 
1

正如Marc所言,使用split(「」)是最簡單的解決方案。正則表達式方法需要謹慎。 例如,如果我們使用hwnd的正則表達式模式,並且其中一個數據字段以「AN」結尾,會發生什麼?

+0

是否可以使用finditer? – user17 2014-09-07 07:15:59

+0

在這裏,finditer方法可能是矯枉過正的。但我很困惑:在你原來的文章中,你說過你想要「在'AN:'或'Acnt No:'之後的字母數字字符串」。但是現在你抱怨說:「這也會打印AN和Acnt No」。那麼你真的希望你的代碼做什麼? – 2014-09-07 09:41:47