Regex захватывает десятичную строку - PullRequest
0 голосов
/ 19 декабря 2018

Итак, у меня есть строка, состоящая из смеси текста, специальных символов и десятичных знаков:

2018-12-18 00:00:00 : TEXT0        TEXT1 0,123 - TEXT2 1,123 - TEXT3 2,123 - TEXT4 3,123

Меня интересует что-то, что может захватить 2,123.До сих пор я пробовал что-то вроде:

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+ ) \w+ \d+,\d{3} - \w+ \d+,d{3} - \w+ (\d+,d{3}) - \w+ \d+,d{3}

Но, похоже, не работает.Я собираю здесь еще две группы, одну для даты впереди и одну для TEXT0.Они прекрасно работают сами по себе.Есть намеки?

Я сижу в .NET 4.5.2.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Помимо написания d вместо \d и сопоставления с одним пробелом, вы можете немного сократить свое регулярное выражение, повторив часть, соответствующую \w+ \d,\d{3} -, и сделать цифру с запятой группой захвата.

Таким образом, группа захвата будет последним появлением повторяющегося шаблона:

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+ +)(?:\w+ (\d,\d{3}) - )*\w+ \d+,\d{3}

Regex demo

0 голосов
/ 19 декабря 2018

Кажется, что в вашем регулярном выражении было только несколько опечаток, где вы написали только d вместо \d для намерения захватить число, и в одном месте было несколько пробелов, но вы просто написали один пробел, из-за чегоt match.

Измените это регулярное выражение,

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+ ) \w+ \d+,\d{3} - \w+ \d+,d{3} - \w+ (\d+,d{3}) - \w+ \d+,d{3}

на это,

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+) +\w+ \d+,\d{3} - \w+ \d+,\d{3} - \w+ (\d+,\d{3}) - \w+ \d+,\d{3}

И оно начнет сопоставлять и захватывать данные, как вы ожидаете.

Демонстрация в реальном времени

...