Можно ли сравнить два значения в строке и получить желаемое, но оба значения соответствуют написанному регулярному выражению - PullRequest
0 голосов
/ 25 апреля 2019

text = "Счастливого 4/20 от команды! 13/10 поздравляю ... после стольких содержаний"

Я хочу получить только 13/10, который является рейтингом. Я написал регулярное выражение

(\d+\.\d+|\d+)/(((?=10)10)|([1-9]\d+)) 

но он выбирает первый (4/20). Можно ли этого добиться с помощью регулярных выражений?

1 Ответ

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

В этой части вашего паттерна (?=10)10 вы можете опустить положительный прогноз, потому что это говорит о том, что если справа то 10, то соответствует 10. Эта часть [1-9]\d+ соответствует 10 и выше, поэтому 10 уже находится в диапазоне.

Вы можете использовать группу захвата с квантификатором {2}, чтобы повторить эту группу.

Ваш шаблон также может быть записан как \d+(?:\.\d+)?/[1-9]\d+)

Чтобы получить вторую группу, вы можете использовать:

^(?:.*?(\d+(?:\.\d+)?/[1-9]\d+)){2}
  • ^ Начало строки
  • (?: Группа без захвата
    • .*? Совпадение с любым символом без жадности
    • ( Группа захвата
      • \d+(?:\.\d+)? Совпадение 1+ цифр, опционально совпадение с точкой и 1+ цифр
      • / Совпадение/
      • [1-9]\d+ Матч 10 и выше
    • ) Закрыть группу захвата
  • ){2} Закрытьгруппа без захвата и повторите 2 раза

Regex demo

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