REGEX извлекает два двойных числа, отделенных от гипена - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть строки вроде:

 some foo text
 some foo
 1-2
 1.00-2.00
 3.21-1.23
 2.12-2.12

Я должен проверить, содержит ли формат строки два числа, разделенных дефисом.

Как я могу это сделать?

Спасибо

Ответы [ 3 ]

1 голос
/ 06 апреля 2019

Регламент для числа с плавающей запятой: ^[1-9]\d*\.\d+$ если десятичные дроби необязательны: ^[1-9]\d*(?:\.\d+)?$

Повторите это дважды с дефисом между:

`^[1-9]\d*(?:\.\d+)?-[1-9]\d*(?:\.\d+)?$`
1 голос
/ 06 апреля 2019

Используйте простое регулярное выражение:

(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)

В этом решении предполагается, что всегда присутствует десятичная часть (как минимум одна цифра).Демо на Regex101 .

  • \d - это цифра
  • \d+ - это хотя бы одна цифра
  • \. соответствуетточка (.) буквально
  • () - это группа захвата
  • (?:\.\d+)? - это группа без захвата, которая необязательно соответствует десятичной части

Не забывайте правильное экранирование в Java String regex = "(\\d+(?:\\.\\d+)?)-(\\d+(?:\\.\\d+)?)";

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

(\d+(?:\.\d+)?)\s*-\s*(\d+(?:\.\d+)?)
1 голос
/ 06 апреля 2019

Вы можете использовать регулярное выражение:

^\d+(\.\d+)?-\d+(\.\d+)?$

Объяснение можно найти здесь .


Используя java, вы можете создать метод, который проверяет, существует ли желаемый шаблон:

public static boolean returnMatch(String input) {
    Pattern p1 = Pattern.compile("^\\d+(\\.\\d+)?-\\d+(\\.\\d+)?$");
    Matcher m1 = p1.matcher(input);

    return m1.find() ? true : false;
}

Теперь позвоните, используя:

System.out.println(returnMatch("some foo text"));  // false
System.out.println(returnMatch("1.00-2.00"));      // true
System.out.println(returnMatch("2.12-2.12"));      // true
System.out.println(returnMatch("10-20"));          // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...