2017-04-21 122 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])