2012-06-07 3 views
1

Я пытаюсь использовать этот повторный шаблон r'\({2}.+?\){2}' , чтобы поймать выражение ((slug1/slug2/slug3 someword)) из текста.Правильный способ поймать страницу slug1/slug2/slug3 с помощью Regex?

Это дает мне само выражение, т. Е. '((slug1/slug2/slug3 someword))'. Затем я разбираю его, используя Python:split, чтобы получить slug1/slug2/slug3 и someword отдельно.

Как я могу получить то же самое, используя чистый шаблон Regex с группами. Какой шаблон должен быть? Любая помощь приветствуется.

ответ

1

Предполагая, что слизни не может содержать пробелы:

\({2}(\S*)\s(.*?)\){2} 

более явно:

\({2} # two literal '(' characters 
(\S*) # any number of non-whitespace characters, captured in group 1 
\s  # any whitespace character 
(.*?) # any number of characters, reluctantly, captured in group 2 
\){2} # two literal ')' characters 

Так slug1/slug2/slug3 будет в 1-й группе и someword будет в группе 2.

+0

очень полезный пример для меня! – Swordfish

0

Я пришел вверху с этим регулярным выражением:

/([\w\/]+) (\w+)/ 

Он оценивает, правильно используя эту команду:

perl -e '$a="((slug1/slug2/slug3 someword))"; if ($a =~ /([\w\/]+) (\w+)/) {print "$1 $2"}' 
+0

В зависимости от используемого прецедента OP вам может потребоваться добавить парсеры (например, если они запускают регулярное выражение в файле с большим количеством другого текста, который они не хотят сопоставлять). – beerbajay

+0

правильно :) было бы неплохо, если бы автор дал нам больше информации о структуре текста – Sicco

+0

текст мог бы быть любым, он будет использоваться для поля ввода пользователем. – Swordfish

 Смежные вопросы

  • Нет связанных вопросов^_^