2017-01-03 4 views
1

У меня есть регулярное выражение, которое отвечает за сопоставление шаблона A: B в строках, где у вас может быть несколько совпадений (например, «A: BA: BA: BA: B» и т. Д.). .) Проблема заключается в сложности того, что представляет A.Условное регулярное выражение для нескольких совпадений в строке

Я использую регулярное выражение:

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

, чтобы соответствовать элементов в:

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 

Вопрос в том, если вы исследуете эту установку (я использую https://regex101.com/), линии 2,3 , 5 не вернули именно то, что я ищу. Если совпадение является первым в строке, я хочу, чтобы он захватил все, начиная с начала строки, до первого «:». Возможно ли такое условное регулярное выражение? Я старался изо всех сил, но я еще не успел.

Заранее благодарен!

+0

Просто FYI Вы можете сохранять и делиться regex101 страницы https://regex101.com/r/O4JKiI/1 –

+0

Что именно вы пытаетесь захватить? Все до первого ':' на каждой строке? –

+0

Я не знал, что вы можете делиться страницами регулярных выражений. По большей части я пытаюсь зафиксировать то, что захватили вышеперечисленное выражение, за исключением первого совпадения строки. Регулярное выражение, которое дает мне желаемый результат для первого маха: '^ ([\ w | \ (| \), \ s] *) \ s *: (?: (?! [\ W +] + \ s *:).) * ' – PilotGuy

ответ

0

Немного сложно, но попробовать этот here

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

Большое спасибо! Это сработало отлично. Я три дня бил головой об этом. Я, очевидно, новичок в Regex, но я решил его изучить. Спасибо за помощь! – PilotGuy

+0

@PilotGuy не слишком сильно себя избивает, это было довольно сложно. Трюк в основном сжимает три регулярных выражения для двух + ':' s, один ':' и no ':' s –