Извлечь конкретную строку с помощью регулярного выражения - PullRequest
0 голосов
/ 28 января 2019

Я хочу извлечь только определенную строку, если ее соответствие

, например, в качестве входной строки:

  • 13.10.0 /

  • 13.10.1 /

  • 13.10.2 /

  • 13.10.3 /

  • 13.10.4.2 /

  • 13.10.4.4 /

  • 13.10.4.5 /

Я использую это регулярное выражение [0-9]+.[0-9]+.[0-9] для извлечения только digit.digit.digit из строки, если она совпадает, но в этом случае это неверный вывод, связанный с моим регулярным выражением:

13.10.0

13.10.1

13.10.2

13.10.3

13.10.4.2 (нет необходимости совпадать с этой строкой 13.10.4)

13.10.4.4 (нет необходимости совпадать с этой строкой 13.10.4)

13.10.4.5 (нет необходимости совпадать с этой строкой 13.10.4)

правильный вывод, который мне нужен:

  • 13.10.0

  • 13.10.1

  • 13.10.2

  • 13.10.3

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Трудно сказать, не зная, как вы передаете эти строки - это строки в файле?Массив строк на языке программирования?

Если вы ищете файл, используя grep или аналогичный инструмент, он выдаст вам все строки, которые соответствуют где угодно , даже если толькочасть строки совпадает.

Обычно вы решаете эту проблему, используя anchors , чтобы указать, что регулярное выражение должно начинаться с первого символа строки и заканчиваться последним (например, ^[0-9]+.[0-9]+.[0-9]$).^ соответствует началу строки, а $ соответствует концу.

В вашем случае у вас есть косые черты в конце всех строк, поэтому самое простое решение - сопоставить этофинальная косая черта, с ^[0-9]+.[0-9]+.[0-9]/.

Вы также можете использовать заголовок или группы, чтобы сопоставить косую черту, не возвращая ее - но это зависит немного больше от того, на каком инструменте вы используете это регулярное выражение и как выповторно обработать его.


Если ваши строки разделены пробелами (кроме символов новой строки), замена ^ на (^|\s) (либо начало строки, либо какой-либо символ пробела) может работать -- но это добавит пробел к некоторым вашим результатам.

Вам также может понадобиться настроить инструмент регулярных выражений так, чтобы он совпадал несколько раз в строке (например, флаг -o в grep).Опять же, трудно дать полезный совет по этому поводу, не зная, какой инструмент регулярных выражений вы используете, или как вы обрабатываете результаты.

0 голосов
/ 28 января 2019

Я думаю, вы хотите:

^\d+\.\d+\.\d+$

То есть ровно 3 группы цифр (ов), разделенных (буквальными) точками.

0 голосов
/ 28 января 2019

Некоторые инструменты (например, grep) соответствуют всем строкам, содержащим ваше регулярное выражение, и могут содержать дополнительные символы до / после.Используйте символ $, чтобы соответствовать концу строки после вашего регулярного выражения.(Также обратите внимание, что . соответствует любому символу, а не буквальной точке)

[0-9]+\.[0-9]+\.[0-9]$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...