2016-05-04 11 views
0
Zum Beispiel

mit einem bestimmten Zeichen ein Wort zum Spiel:Welche regulärer Ausdruck kann an einem bestimmten Punkt verwendet wird

w for w in wordlist if re.search("..........") 

Lassen Sie sich sagen Sie ein in der zweiten Stelle und ab in der 5. Stelle wollten und Sie wissen, es war 8 Zeichen lang. Kannst du das auch mit Regex machen? Vielen Dank.

Beispiel Eingang, kann sagen, Wortliste nur zwei Worte: [Test] [batpbuuu]

Diese Regex zurückkehren würde batpbuuu, weil es eine a in der zweiten Stelle und b im 5. hat.

+0

Haben Sie eine Beispieleingabe und auch eine erwartete Ausgabe? – AKS

Antwort

3

Ich würde vorschlagen, re.match (mit '.a.{2}b.{3}') statt re.search, damit es nicht versuchen, diese Zeichen in der Mitte der Zeichenfolge zu finden, aber es klingt nicht wie Sie überhaupt für dieses eine Regex benötigen.

+0

Ja, natürlich, was Sie getan haben, ist einfacher, Regex wird nicht benötigt, aber ich würde gerne wissen, wie/wenn Sie es in Regex tun könnten. –

+0

@BNSlug Es ist bereits hier beantwortet. – AKS

3

Sie können vollständig sicherstellen, dass das 2. Zeichen a und das 5. Zeichen b in Regex ist. Du brauchst nicht einmal Regex dafür zu benutzen, aber ich werde es trotzdem zeigen, da du das gefragt hast.

Hier ist ein Beispiel:

.a.{2}b 

Der erste Punkt entspricht ein beliebiges Zeichen (außer Newline), neben passen wir nur eine a, uns alle Zeichen dann passen (außer Newline) 2 mal, dann passen wir nur dann, wenn es hat ein b.

kallb #matches 

ja78b #matches 

ja99k #doesnt match (missing a b) 

jkksb #doesnt match (missing an a) 

kj912 #doesnt match (missing both) 

Regex101: https://regex101.com/r/wR6lR3/1

+0

Ich glaube, es ist '2' für das zweite' .', nicht '3', da das' b' das fünfte Zeichen sein sollte, nicht das sechste. Und Sie brauchen keinen Bereich, wenn Sie nur eine exakte Anzahl von Wiederholungen wünschen. – TigerhawkT3

+0

@ TigerhawkT3 danke, du hast Recht. Ich habe sie alle repariert. – Keatinge

+0

@Racialz Es wird noch nicht geprüft, ob die Zeichenfolge 8 Zeichen lang ist. – AKS

1

Sie können für Ihre Anforderung folgendes tun

re.search('.a..b...', word) 

. bedeutet ein beliebiges Zeichen

a -> in der zweiten Lage

b ---> in der 5. locatoin

+0

ausführen möchte. Ich denke, es ist "und ein' b' in der 5. Position " als "und' ab "in der 5. Position." – TigerhawkT3

+0

@ TigerhawkT3, danke. Ich habe es korrigiert –

+0

Müssen wir angeben (r'.a...b ..') statt (' .a..b .. ')? @heemayl, es ist implizit Regex, wenn wir re.search verwenden, richtig? –

2

Sie tun können:

re.search(r'^.a.{2}b.{3}$', i) 

Beispiel:

>>> w = ['test', 'batpbuuu', 'foobar', 'aachbfoo55', 'laghb678'] 
>>> [i for i in w if re.search(r'^.a.{2}b.{3}$', i)] 
['batpbuuu', 'laghb678'] 
+1

Wenn die Acht-Zeichen-Länge eine Voraussetzung ist (die Frage ist in diesem Punkt mehrdeutig), dann ist dies die einzige richtige Antwort bisher. Aber jede Antwort, die * am Anfang kein '^' hat (oder die Methode 'match' verwendet, die den gleichen Effekt hat) ist definitiv falsch. –