2017-04-21 47 views
-1

私はアドレスを含むリストを持っています。私はそれらから通りの名前だけを抽出したいと思います。次のように正規表現で文字列を抽出する正規表現

と仮定、私の文字列は以下のとおりです。

'897 har glen' 
'47 ts brook' 

他の答えはちょうど通りの名前を持つ必要があり、次がある ワン:

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

が、私は2つの答えの種類をしたいです:

'har glen' 
'ts brook' 


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

上記のコマンドは機能しません。私は2番目の方が簡単だと思います。しかし、私は本当に最初に行く方法を知りたいです。基本的には、私の文字列に "apt"または "suite"で始まるフレーズは必要ありません。

正規表現はあまりにも混乱していて、どんな助けでも大歓迎です!

ありがとうございます!

+0

、このツールが役に立つかもしれ - http://regexr.com/ – AlphaTested

+0

これはどう? [addrsのaddrのための[re \ 's(apt | suite)。* $'、 ''、addr] – Shiping

+0

'[apt | suite]'がマッチする正しい方法正規表現の代替?私たちは常にそれを見ていますが、それはチュートリアルにはありません。 – Barmar

答えて

0

あなたのルールがあるか、少し曖昧かもしれないが、このような何かがうまくいくかもしれない:

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) 
:パイソンとのより完全な例については、このようになります

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

Live Demo

出力:

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])