Регулярное выражение для сопоставления строк с указанным c числом десятичных чисел - PullRequest
1 голос
/ 26 февраля 2020

Я хочу сопоставить строки, имеющие c количество десятичных чисел, разделенных пробелами. Скажите строки, имеющие только 3 десятичных числа. Рассмотрим приведенный ниже пример:

 Abc 1.56 1.67 5.67
 xyz 4.51 12.43 32.50
 03/31/2019 $1234 $(1234) $60,501 5.81 7.81
 abcdf $123,345 $123 $123,149

Для этого заданного ввода я хочу получить только первые две строки, поскольку они содержат только 3 десятичных числа, разделенных пробелом. Я пытался (. * [\ S0-9.] +) $ && ([\ s0-9.] +) $ , но в результате я получил много других нежелательных Строки, а также кто-нибудь, пожалуйста, сообщите, если это то, что мы можем сделать с помощью регулярного выражения.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Использование [\s0-9.]+ представляет собой широкое совпадение для десятичного числа, поскольку оно может также соответствовать только символам новой строки, пробелам или точкам.

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

^.*?\d+\.\d+(?:\h+\d+\.\d+){2}$

Пояснение

  • ^ Начало строки
  • .*? Соответствует любому символу, кроме новой строки, не жадной
  • \d+\.\d+ Соответствует десятичному номеру
  • (?:\h+\d+\.\d+){2} Повторить 2 раза, сопоставляя 1+ горизонтальные пробельные символы и десятичное число
  • $ Конец строки

In Java

String regex = "^.*?\\d+\\.\\d+(?:\\h+\\d+\\.\\d+){2}$";

Regex demo

Если di git перед десятичной дробью не является обязательным, вы можете изменить его на \d*\.\d+

0 голосов
/ 26 февраля 2020

Чтобы сопоставить строки, начинающиеся с некоторого текста, а затем трех десятичных чисел, разделенных пробелами, используйте это регулярное выражение:

(?m)^(\p{L}+)\h+(-?[\d.]+)\h+(-?[\d.]+)\h+(-?[\d.]+)\h*$

Не забудьте удвоить \ при вставке в Java строковый литерал.

См. regex101 для демонстрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...