1

私は次の2つのリストを持っています:

input = ['MAPLEWOOD AVE', 'LYNNDALE ', 'SUGAR DR']

ref = ['LYNNDALE (?:RD)?', 'HOMAN (?:AVE)?', 'MAPLEWOOD (?:AVE)?', 'LYNNDALE (?:LN)?']

inputwith内の各要素に一致するものをすべて探したいと思いますrefinput出力は、次のように、各キーが要素であり、各値がref対応する要素に一致する要素である辞書にinputなります。

{'MAPLEWOOD AVE' : 'MAPLEWOOD AVE', 'LYNNDALE ' : 'LYNNDALE RD', 'LYNNDALE LN', 'SUGAR DR':}

以下では、 (埋め込まれた正規表現グループを含む)内の一致inputを検索するために反復することができます。ただし、対応する一致要素を各入力要素の横の値として取得することはできません。findallrefref

combined = "(" + ")|(".join(ref) + ")"

l = []

for i in input:
    if re.findall(combined,i):
         l.append(i)
...
MAPLEWOOD AVE
LYNNDALE
4

2 に答える 2

5

試す:

import re

input = ['MAPLEWOOD AVE', 'LYNNDALE ', 'SUGAR DR']
ref = ['LYNNDALE (?:RD)?', 'HOMAN (?:AVE)?', 'MAPLEWOOD (?:AVE)?', 'LYNNDALE (?:LN)?']
output = dict([ (i, [ r for r in ref if re.match(r, i) ]) for i in input ])

または、Python 3を使用している場合:

output = { i : [ r for r in ref if re.match(r, i) ] for i in input }

また、正規表現をコンパイルして少し高速化することもできます。

ref_re = [ re.compile(r) for r in ref ]
output = { i : [ r.pattern for r in ref_re if r.match(i) ] for i in input }

UPD: パターンではなく、一致した部分を値として使用したい場合があります。

output = { i : [ r.match(i).group(0) for r in ref_re if r.match(i) ] for i in input }
于 2013-01-13T22:21:32.823 に答える
0

空白を正規表現に入れなかったと思います。この方法を試してください:

ref = ['LYNNDALE\s*(?:RD)?', 'HOMAN\s*(?:AVE)?', 'MAPLEWOOD\s*(?:AVE)?', 'LYNNDALE\s*(?:LN)?']
于 2013-01-13T22:13:16.487 に答える