Регулярное выражение последнего вхождения цифры перед строкой - PullRequest
2 голосов
/ 15 июня 2019

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

 6 łyżek stopionego masła -> 6
5 łyżek blabla, 6 łyżek masła -> 6
5 łyżek mąki lub masła -> 5

Я сопоставляю только с masła (изменяющая переменная), поэтому его необходимо включить в регулярное выражение

РЕДАКТИРОВАТЬ: я не могу объяснить, что мне действительно нужно: Вот пример regex101: https://regex101.com/r/pEeRk3/1

РЕДАКТИРОВАТЬ2: Решение Эммы работает отлично, но мне нужно было бы также проанализировать десятичные и двухзначные числа, что означает, что они также будут совпадать: https://regex101.com/r/pEeRk3/3 - я добавил примеры сответы в ссылке

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

Этого выражения может быть просто достаточно:

.*([0-9])

, если нас интересует только одна цифра, или

.*([0-9]+)

, если может потребоваться несколько цифр.

Демо 1

Если желательны эти строки с masła, мы можем расширить наше выражение до:

(?=.*masła).*([0-9])

Демо2

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

(?=.*masła)([0-9,.]+)(\D*)$

Демо 3

1 голос
/ 16 июня 2019

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

(?<!\S)\d+(?:\.\d+)?(?!\S)(?!.*\d)(?=.*masła)
  • (?<!\S)\d+(?:\.\d+)?(?!\S) Совпадение 1+ цифрс необязательным прошлым для совпадения с точкой и 1+ цифрами
  • (?!.*\d) утверждают, что больше нет цифр после
  • (?=.*masła) Подтвердите, что справа ваше слово

Regex demo

Или вы можете использовать группу захвата:

(?<!\S)(\d+(?:\.\d+)?)[^\d\n]* masła(?!\S)[^\d\n]*$

Regex demo

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