如果下面是字符串:定義正則表達式
"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz"
我想只提取以下'AN : '
或'Acnt No : '
的字母數字字符串。
我想要一個Python腳本的正則表達式。
如果下面是字符串:定義正則表達式
"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz"
我想只提取以下'AN : '
或'Acnt No : '
的字母數字字符串。
我想要一個Python腳本的正則表達式。
我會用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
這會打印AN和Acnt No .. – user17 2014-09-07 07:51:33
也需要包含其他值。我們也可以將字符串與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
正如Marc所言,使用split(「」)是最簡單的解決方案。正則表達式方法需要謹慎。 例如,如果我們使用hwnd的正則表達式模式,並且其中一個數據字段以「AN」結尾,會發生什麼?
是否可以使用finditer? – user17 2014-09-07 07:15:59
在這裏,finditer方法可能是矯枉過正的。但我很困惑:在你原來的文章中,你說過你想要「在'AN:'或'Acnt No:'之後的字母數字字符串」。但是現在你抱怨說:「這也會打印AN和Acnt No」。那麼你真的希望你的代碼做什麼? – 2014-09-07 09:41:47
歡迎來到[so]。這裏的問題應該顯示研究努力或嘗試。請參加__ [導遊] __。 – Unihedron 2014-09-06 16:57:39
爲什麼使用正則表達式?只需拆分「」並採取結果列表的適當元素。 – 2014-09-06 17:16:16