2017-04-21 118 views
-1

我有一個包含地址的列表。我想提取他們的街道名稱。正則表達式來提取python列表中的字符串

想,我的琴絃如下:

'897 har glen apt. 55' 
'47 ts brook suite 93' 

我想要兩個類型的答案: 一個有以下幾點:

'897 har glen' 
'47 ts brook' 

其他答案應該就在街道名稱:

'har glen' 
'ts brook' 


m = re.findall('(?:\w+[apt|suite])', '897 har glen apt. 55') 

上述命令不起作用。我認爲第二個更容易。但我真的很想知道如何去做第一個。基本上,我不想要任何以我的字符串中的「apt」或「suite」開頭的短語。

正則表達式對我來說太困惑了,任何幫助都將不勝感激!

在此先感謝!

+0

已經在過去的搏鬥與正則表達式,這個工具可能會有所幫助 - http://regexr.com/ – AlphaTested

+0

這個怎麼樣? [re.sub('s *(apt | suite)。* $','',addr)addrs] addr] – Shiping

+0

人們認爲'[apt | suite]'是匹配的正確方式正則表達式的替代品?我們一直都在看,但它不可能在任何教程中。 – Barmar

回答

0

你的規則是或可能是有點模糊,但這樣的事情可能工作:

\d+[ \t]*(.*?)[ \t]*(?=apt|suite) 

Live Demo

這對於與Python更完整的示例如下:

s = """ 
897 har glen apt. 55 
47 ts brook suite 93 
""" 

for match in re.findall(r"\d+[ \t]*(.*?)[ \t]*(?=apt|suite)", s): 
    print(match) 

輸出:

har glen 
ts brook 
+0

而不是'[\ t]'使用'\ s'來匹配空白區域。 – Barmar

+0

@Barmar本意使用'[\ t]'作爲'\ s'也匹配換行符,這可能是不希望的。 – Vallentin

0

你可以試試這個。

addrs = ['897 har glen apt. 55', '47 ts brook suite 93'] 
[re.sub('\s*(apt|suite).*$', '', addr) for addr in addrs] 
0

Check Live Demo

import re 
m = re.findall('(.*)([apt|suite].*)', '897 har glen apt. 55') 
print([ i for i in m])