2017-07-24 3 views
1

Ich schreibe ein Python-Skript, das nach einer Phrase (1 bis 5 Wörter) in einem Text sucht. Ich möchte zulassen, dass andere Wörter zu denen des Satzes gehören, nach dem ich suche, und ich habe versucht, Regex für eine solche Aufgabe zu verwenden.Nur ein Wort unter bestimmten anderen mit Regex

Say my Phrase

p = "red blue green" 

ist, und ich will unter ihnen GERADE EIN andere Wort erlauben, zu sein und immer noch ein Spiel:

t1 = "this is a red blue green flower" eine Übereinstimmung

t2 = "this is a red blue yellow green flower" sein sollte, sollte eine Übereinstimmung sein

t3 = "this is a red violet blue yellow green flower" sollte eine Übereinstimmung sein

t4 = "this is a red blue yellow and green flower" sollte nicht übereinstimmen

Welches ist die Regex dafür?

+0

oder ohne 're':' any (w in t für w in phrase.split()) '. –

+0

@MosesKoledoye Passt auch dazu: "Das ist rot foo bar foo blau bar grün" –

+0

Sie möchten das Auftreten dieser Wörter überprüfen und das Wort 'und' vernachlässigen? Könnte großartig sein, wenn Sie 2 weitere Testfälle für nicht übereinstimmen könnten –

Antwort

0

Hier ist ein Weg, um die entsprechenden RegexMuster zu erhalten, wenn der Auftrag red, blue, green immer eingehalten wird:

markers = "red blue green".split() 

pattern = r'\b'+ ' (\w+)?'.join(markers) + r'\b' 
print(pattern) 
# \bred (\w+)?blue (\w+)?green\b 

Hier ist ein kleiner Test:

t1 = "this is a red blue green flower" 
t2 = "this is a red blue yellow green flower" 
t3 = "this is a red violet blue yellow green flower" 
t4 = "this is a red blue yellow and green flower" 

import re 
print(re.search(pattern, t1)) 
# <_sre.SRE_Match object at 0x7ff0a72741c8> 
print(re.search(pattern, t2)) 
# <_sre.SRE_Match object at 0x7ff0a72741c8> 
print(re.search(pattern, t3)) 
# <_sre.SRE_Match object at 0x7ff0a72741c8> 
print(re.search(pattern, t4)) 
# None 
+0

Danke, das ist perfekt! – Fed

Verwandte Themen