Regex сопоставляет целое число с lookbehind и просматривает logi c (без границ слова) - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь определить, имеет ли строка число, основанное на нескольких условиях. Например, я не хочу совпадать с числом, если оно заключено в круглые скобки, и я использую для этого предвидение и заглядывание, но у меня возникают проблемы, когда число содержит несколько цифр. Кроме того, число может быть между текстом без разделителей пробелов.

Мое регулярное выражение:

(? https://regex101.com/r/RnTSMJ/1

Примеры примеров: {2}: НЕ должно совпадать. // мое регулярное выражение работает

{34: не должно совпадать. // мое регулярное выражение соответствует 4 в {34

45}: не должно совпадать. // мое регулярное выражение соответствует 4 в {45

{123}: НЕ ДОЛЖНО совпадать. // Мое регулярное выражение соответствует 2 в {123}

Я посмотрел на Регулярное выражение. Совпадение целых слов , но этот подход не работает для меня. Если я использую границы слов, вышеупомянутые случаи работают, как и ожидалось, но в таких случаях, как приведенные ниже, нет, когда числа заключены в текст. Я также хочу добавить некоторые дополнительные логи c, например, не совпадают с указанными c строки типа 1st, 2nd, et c или # 1, # 2, et c

обновленное регулярное выражение:

(?<!\[|\{|\(|#)(\b\d+\b)(?!\]|\}|\|st|nd|rd|th)

См. здесь https://regex101.com/r/DhE3K4/4

123abd // должно соответствовать 123

abc345 // должно соответствовать 234

ab2123cd // должно соответствовать 2123

Возможно ли это с чистым регулярным выражением или мне нужно что-то мо всеобъемлющий?

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Вы можете совпасть с 1 или более цифрами, утверждая, что слева и справа нет {, }, или ди git, или любой другой параметр справа

(?<![{\d#])\d+(?![\d}]|st|nd|rd|th)

Пояснение

  • (?<![{\d#]) Отрицательный взгляд сзади, утверждайте, что слева не {, # или ди git
  • \d+ Совпадение 1+ цифр
  • (?! Отрицательный взгляд вперед, утверждайте, что справа не
    • [\d}]|st|nd|rd|th Совпадение с ди git, } или любым из альтернативы
  • ) Закрыть взгляд

Regex demo

0 голосов
/ 23 марта 2020

Следующее регулярное выражение дает ожидаемый результат.

(?<![#\d{])\d+(?!\w*(?:}|(?:st|th|rd|nd)\b))

Regex Link

...