Sie den folgenden regulären Ausdruck verwenden können und Muster, um es verwenden, während die Datei zu lesen, Zeile für Zeile:
^(\d*\s[A-Z\s]*)\s(\d*\s[A-Z\s]*)$
Hier ist ein anschauliches Beispiel: https://regex101.com/r/18dege/1
Hier
ein paar Details:
^
entsprechen den Anfang der Zeichenfolge, $
das Ende davon
\d*
eine beliebige Anzahl (0 oder mehr) von numerischen Zeichen gierig (gleich [0-9]*
)
\s
entspricht einem Leerzeichen (z. B. tab, Raum, etc.)
[A-Z\s]*
beliebige Anzahl (0 oder mehr) von Großbuchstaben und Leerzeichen gierige
()
eine passende Gruppe erzeugt (einige Teile der Zeichenfolge) zu extrahieren
Laut dem folgenden Kommentar können Großbuchstaben von Kleinbuchstaben gefolgt werden, die nicht übereinstimmen sollten. Ein Beispiel hierfür wäre:
7 BALLS OF STRING 13 CARDBOARD BOXES
14 ROCKS 12 PENCILS
18 TABLES 3 BLANKETS sewn with patches
dieses Muster passen, können Sie den folgenden regulären Ausdruck verwenden:
^(\d*\s[A-Z\s]*?)[a-z\s]*\s(\d*\s[A-Z\s]*?)[a-z\s]*$
Als Update auf das obige Muster habe ich hinzugefügt folgende:
[a-z\s]*
zwischen den Aussagen (in der Gruppe) und nach der zweiten Anweisung, einen Klein String
- passenIch habe ein Fragezeichen
?
hinzugefügt, um die Übereinstimmung nicht-gierig zu machen. Dadurch wird verhindert, dass der Leerraum zwischen Groß- und Kleinschreibung der entsprechenden Gruppe hinzugefügt wird. Es ist nun erforderlich, dass am Ende des Musters ein Ende des Zeichenkettenzeichens $
steht, andernfalls würde die zweite Gruppe nicht genügend Zeichen entsprechen. Hier
ist ein anschauliches Beispiel: https://regex101.com/r/18dege/2
Welche Sprache oder Werkzeug verwenden Sie? Wie hast du versucht, das zu lösen? –
Bitte fügen Sie einige Beispielversuche hinzu, die Sie versucht haben. Die Gemeinschaft ist viel eher in der Lage, Ihnen zu helfen, sobald Sie es tun. – ThatChris