Regex для соответствия 2 цифрам, дополнительному десятичному числу, двум цифрам

Следующий фрагмент кода прекрасно компилируется в Java 8, но без нового оператора будет неоднозначным:

import java.util.function.IntBinaryOperator;

public class A {

  public static IntBinaryOperator addThemUp;

  public static int addThemUp(int i1, int i2) {
    return i1 + i2;
  }

  public static void main(String[] args) throws Exception {
    IntBinaryOperator operator = A::addThemUp;
  }
}

Не ясно, относится ли A.addThemUp к общедоступному полю IntBinaryOperator. или это попытка создать ссылку на метод.

Да, это немного надумано. Но вы не можете разрешить крайние случаи в синтаксисе языка программирования .

36
задан Lightness Races with Monica 22 February 2013 в 16:44
поделиться

7 ответов

РЕДАКТИРОВАТЬ: Изменено, чтобы соответствовать другой обратной связи.

Я понял, что вы имели в виду, что если нет десятичной точки, то не должно быть больше двух цифр. Так должно быть:

\d{0,2}(\.\d{1,2})?

Это должно помочь в большинстве реализаций. Если нет, вы можете использовать:

[0-9]?[0-9]?(\.[0-9][0-9]?)?

И это должно работать во всех реализациях, которые я видел.

59
ответ дан 27 November 2019 в 05:39
поделиться

Чтобы опираться на ответ Ли, вам нужно привязать выражение, чтобы удовлетворить требованию не иметь более двух чисел перед десятичной дробью.

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

^\d{0,2}(\.\d{1,2})?$

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

\b\d{0,2}(\.\d{1,2})?\b
4
ответ дан 27 November 2019 в 05:39
поделиться
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])

Соответствует:

  • Ваши примеры
  • 33.

Не соответствует:

  • 333.33
  • 33.333
7
ответ дан 27 November 2019 в 05:39
поделиться
^\d{0,2}\.?\d{1,2}$
0
ответ дан 27 November 2019 в 05:39
поделиться

Вы упомянули, что хотите, чтобы регулярное выражение соответствовало каждой из этих строк, но ранее вы упомянули, что перед десятичной дробью стоит 1-2 цифры?

Это будет соответствовать 1-2 цифрам, за которыми следует возможное десятичное число, за которым следует еще 1-2 цифры, но НЕ ИСПОЛЬЗУЕТСЯ в вашем примере .33

\d{1,2}\.?\d{1,2}

Это будет соответствовать цифрам 0-2, за которыми следует возможное десятичное число, за которым следуют еще 1-2 цифры, и совпадет в вашем примере с .33

\d{0,2}\.?\d{1,2}

Не уверен точно какой именно вы ищете.

3
ответ дан 27 November 2019 в 05:39
поделиться

A предыдущий ответ в основном правильный, но он также будет соответствовать пустой строке. Следующее может решить эту проблему:

^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$
0
ответ дан 27 November 2019 в 05:39
поделиться
^(\d{0,2}\\.)?\d{1,2}$

\ d {1,2} $ соответствует 1-2-значному номеру, после которого ничего не указано ( 3 , 33 и т. Д. .), (\ d {0,2} \.)? соответствует необязательному числу длиной от 0 до 2 цифр, за которым следует точка ( 3. , 44. , . и т.д.). Соедините их вместе, и вы получите регулярное выражение.

1
ответ дан 27 November 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: