2017-01-03 2 views
1

Ich habe eine Regex, die dafür verantwortlich ist, das Muster A: B in Zeilen, in denen Sie möglicherweise mehrere Übereinstimmungen haben (zB "A: BA: BA: BA: B", usw.) .) Das Problem liegt in der Komplexität dessen, was A repräsentiert.Bedingte Regex für mehrere Übereinstimmungen in einer Zeile

Ich bin mit dem regex:

\b[\w|\(|\)+]+\s*:(?:(?![\w+]+\s*:).)* 

entsprechen Artikel unter:

Data_1: Tutor    Elementary: 10 a F     Test: 7.87 sips 
Turning 1 Data (A Run), Data: 0.0 10.0 10.0 17.3 0.0 
Turning 2 Data (A Run), Data2: 0.0 6.8 0.0 6.8 6.8 
Data_1: Tutor Pool: Data2: A B C 
Turning 2 (A Run), ABSOLUTE:  368 337 428  0  2 147 
Data_4 : 4AZE Localization : 33.14 lat -86 long 
Time: 0.75 Data Scenario: 3121.2 

Die Frage ist, wenn Sie diese Einstellung prüfen (ich verwende https://regex101.com/), Linien 2,3 , 5 gib nicht genau das wieder, wonach ich suche. Wo das Match das erste in der Zeile ist, möchte ich alles vom Anfang der Zeile bis zum ersten ':' aufnehmen. Ist diese Art von bedingten Regex möglich? Ich habe alles versucht, was ich mir vorstellen kann, aber ich war noch nicht erfolgreich.

Vielen Dank im Voraus!

+0

Gerade FYI können Sie regex101 Seiten https://regex101.com/r/O4JKiI/1 –

+0

Was genau Sie zu erfassen versuchen, speichern und mit anderen teilen? Alles bis zum ersten ':' in jeder Zeile? –

+0

Ich wusste nicht, dass Sie die Regex-Seiten teilen können. In den meisten Fällen versuche ich genau zu erfassen, was der obige Regex erfasst - mit Ausnahme der ersten Übereinstimmung der Zeile. Die Regex, die mir das gewünschte Ergebnis für den ersten Mach gibt, ist: '^ ([\ w | \ (| \), \ s] *) \ s *: (?: (?! [\ W +] + \ s *:).) * ' – PilotGuy

Antwort

0

Ein wenig komplex, aber versuchen, diese here

^(.*?:.*?)(\b\w+\b\s*:.*?)\b\w+\b:.*$|^(.*?:.*?)\b\w+\b\s*:(.*?)$|^(.*)$ 
+0

Vielen Dank! Das hat perfekt funktioniert. Ich habe mir drei Tage lang den Kopf darüber geschlagen. Ich bin natürlich neu in Regex, aber ich bin entschlossen, es zu lernen. Danke für die Hilfe! – PilotGuy

+0

@PilotGuy mach dich nicht zu sehr fertig, das war ziemlich kompliziert. Der Trick besteht darin, drei Regexes für zwei + ':' s, eins ':' und kein ':' s zusammenzufügen –

Verwandte Themen