Как я могу реализовать переменную ширину взглянуть за регулярное выражение, чтобы получить список элементов?

У меня есть список предметов, в котором указан его тип в данном случае «фрукты», теперь мне нужен список всех фруктов и их количество

fruits 5 apples, 2 oranges, 3 bananas

регулярное выражение, которое я пробовал

(?<=fruits\s)((?<count>\d{1,})\s(?<fruit>\w{1,},))

но это дает мне первый фрукт и его количество, но я хочу список всех фруктов с их количеством, поэтому я попробовал это

(?<=fruits\s((?:\d{1,})\s(?:\w{1,},))*)((?<count>\d{1,})\s(?<fruit>\w{1,},))

но я получаю ошибку, утверждая, что взгляд сзади должен быть фиксированной ширины!

Я попробовал образец здесь: http://regex101.com/r/oE6jJ1/1

2

Решение

Используйте приведенное ниже регулярное выражение и получите счет из индекса группы 1 и название фрукта из индекса группы 2.

(?:^fruits|(?<!^)\G)\h*\K(?<count>\d*)\h*(?<fruit>\w*)

DEMO

2

Другие решения

^(?!fruits).*$|((?<count>\d{1,})\s(?<fruit>\w{1,}))

Попробуйте это. Захватите захват. См. Демонстрацию.

http://regex101.com/r/oE6jJ1/10

0

По вопросам рекламы [email protected]