Ich denke James auf etwas ist, aber er hat noch nicht ganz dort.
Sie sollten nicht versuchen, dies mit reinem Regex zu tun. Halte die Dinge einfach. Zunächst sollten Sie nur teilen Sie Ihre Zeichenfolge von &
:
>>> s = 'someText 1 & someText 2 & someText 3 & someText 4'
>>> s.split('&')
['someText 1 ', ' someText 2 ', ' someText 3 ', ' someText 4']
(Dies setzt natürlich voraus, dass someText
nicht &
enthalten kann, aber Sie haben eine viel schwierigeres Problem, wenn er kann.)
Dann müssen wir strip
von den vorderen und hinteren Leerzeichen:
>>> s_clean = [i.strip() for i in s.split('&')]
>>> s_clean
['someText 1', 'someText 2', 'someText 3', 'someText 4']
Jetzt können wir die Elemente herauszufiltern, reguläre Ausdrücke verwenden, um, das nicht übereinstimmen:
>>> import re
>>> [i for i in s_clean if re.match('.+\s+[0-9]+', i)]
['someText 1', 'someText 2', 'someText 3', 'someText 4']
(Hinweis dass re.match
tatsächlich ein Match
Objekt zurückgibt, kein Boolean.)
Dies gibt, was Sie wollen. Um es abzukürzen bis:
s = 'someText 1 & someText 2 & someText 3 & someText 4'
s_clean = [i.strip() for i in s.split('&')]
result = [i for i in s_clean if re.match('.+\s+[0-9]+', i)]
Sie könnte sich dies in einem Einzeiler, wenn Sie wollen, aber es wird noch mehr chaotisch suchen.
Nun wiederholen Sie die folgende Zeile 3 mal an sich selbst:
Regex nicht zu Lösung für alle Textverarbeitungsprobleme gehen.
Welche Versuche haben Sie unternommen? Falls vorhanden, geben Sie bitte an, damit Sie weitere Hilfe erhalten können. Auch welche Art von Zeichen, etc. gibt es möglicherweise in 'someText'? – hwnd
Welche Laufzeit verwenden Sie? Ist das JavaScript, Python, .NET, Java, Ruby, etwas anderes? Wir müssen es wissen, damit wir die Ergebnisse testen können. – jpmc26
Sorry, ich habe die Regex bereits gelöscht, weil sie nicht funktionieren .. @ jpmc26 Python – False