2015-09-28 22 views
2

我正在研究Python中的正則表達式函數。 作爲這一部分,我試圖從字符串中提取一個子字符串。Python中的正則表達式 - 單個「re.sub」調用子字符串

例如,假設我有字符串:

<place of birth="Stockholm"> 

有沒有辦法用正則表達式調用提取斯德哥爾摩?

到目前爲止,我有:

location_info = "<place of birth="Stockholm">" 

#Remove before 
location_name1 = re.sub(r"<place of birth=\"", r"", location_info) 
#location_name1 --> Stockholm"> 

#Remove after 
location_name2 = re.sub(r"\">", r"", location_name1) 
#location_name2 --> Stockholm 

如何提取字符串斯德哥爾摩,而無需使用兩個「應用re.sub」呼籲任何意見表示高度讚賞。

+0

有沒有一個特定的原因,你要刪除字符串的其餘部分,而不是選擇你想要的部分像<.*="(.*)".*> – Enermis

回答

3

當然,你可以匹配開始到雙引號,和比賽,之後捕獲所有比雙引號其他字符:

import re 
p = re.compile(r'<place of birth="([^"]*)') 
location_info = "<place of birth=\"Stockholm\">" 
match = p.search(location_info) 
if match: 
    print(match.group(1)) 

IDEONE demo

<place of birth="與文字匹配,並且([^"]*)是與"以外的0個或更多字符匹配的捕獲組1。該值可通過.group(1)訪問。

這裏是一個REGEX demo

+0

我剛剛比較了我的正則表達式和VK',發現我的速度更快一點:)此外,你的字符串可能包含的不僅僅是地點出生=「...」我的正則表達式會更好地處理這個任務。 –

0

有,爲什麼要刪除的字符串的其餘部分,而不是選擇的一部分,你想要的東西,如

location_info = "<place of birth="Stockholm">" 
location_info = re.search('<.*="(.*)".*>', location_info, re.IGNORECASE).group(1) 
0

這段代碼的python測試的具體原因3.6

test = '<place of birth="Stockholm">' 
resp = re.sub(r'.*="(\w+)">',r'\1',test) 
print (resp) 


Stockholm 
相關問題