2017-05-04 3 views
0

Ich möchte die Schnittmenge von Listen von Wörtern mit Regex erhalten. Die C-Implementierung, die es schneller macht, ist in diesem speziellen Fall von großer Bedeutung ... Obwohl ich einen Code habe, der fast funktioniert, würde er auch eingebettete Wörter wie "Käufer" und "Kaufen" enthalten.Exakte Übereinstimmung der Listen Kreuzung mit regex.findall in Python

Ein Code erklärt es wahrscheinlich besser. Das ist, was ich habe, so weit:

re.findall(r"(?=(" + '|'.join(['buy', 'sell', 'gilt']) + r"))", ' '.join(['aabuya', 'gilt', 'buyer'])) 
>> ['buy', 'gilt', 'buy'] 

Während das ist, was ich möchte:

re.exactfindall(['buy', 'sell', 'gilt'], ['aabuya', 'gilt', 'buyer']) 
>>['gilt'] 

Dank.

+0

Wenn ich richtig verstehe, suchen Sie im Grunde Schnittpunkt von zwei Listen (eine ist Ihre Liste aus Sätzen und eine andere ist eine gegebene Liste.) Siehe Antwort hier: http://StackOverflow.com/Questions/3697432/ how-to-find-list-intersection – xbb

+0

Ich spreche hier über regulären Ausdruck. Aber danke – ylnor

Antwort

1

dies mit regexps zu tun, ist der einfachste Weg, wahrscheinlich Wortbrüche (\b) in der passenden Ausdruck, (außerhalb der Fang) geben Sie einschließen:

re.findall(r"\b(?=(" + '|'.join(['buy', 'sell', 'gilt']) + r")\b)", 
    ' '.join(['aabuya', 'gilt', 'buyer'])) 

die ['gilt'] wie gewünscht ausgibt .

+0

Nizza! Das ist es. Danke! – ylnor

0
listgiven=['aabuya', 'gilt', 'buyer'] 
listtomatch=['buy', 'sell', 'gilt'] 
exactmatch = [x for x in listgiven if x in listtomatch] 
print(exactmatch) 
+0

Danke, aber da Regex in C implementiert ist und schneller läuft, würde ich lieber versuchen, eine Lösung mit regex.findall zu finden, wenn möglich ... – ylnor

Verwandte Themen