У меня есть строка:Регулярное выражение: сопоставление и группировка переменное количество разделенных пробелами слов
"foo hello world baz 33"
часть между foo
и baz
будет некоторое количество разделенных пробелами слов (одного или нескольких). Я хочу, чтобы соответствовать этой строке с повторным, что будет группа из каждых из этих слов:
>>> re.match(r'foo (<some re here>) baz (\d+)', "foo hello world baz 33").groups()
('hello', 'world', '33')
Повторно должна быть гибкой, так что он будет работать в случае, если нет слова вокруг него:
>>> re.match(r'(<some re here>)', "hello world").groups()
('hello', 'world')
Я пытаюсь варианты с ([\w+\s])+
, но я не могу захватить динамически определенное количество групп. Это возможно?
Вы будете нуждаться в 're.findall' и 3, захватив группы:' re.findall (г '^ Foo (\ S +) (\ S +) Баз (\ d +)', ' foo hello world baz 33 ') '. См. [Demo] (https://ideone.com/rAWt3I). –
Это не сработает. Здесь может быть любое количество слов. Так что «foo hello hello hello baz 33» не будет соответствовать – Neil
Не проблема, я обновил [код] (https://ideone.com/rAWt3I). Регулярное выражение может быть «r»^foo (\ S + (?: \ S + \ S +) *) (\ S +) baz (\ d +) ''. Или вы хотите, чтобы слова в первой группе захвата были разделены? Тогда это невозможно без дополнительных операций. Просто регулярное выражение не будет делать. –