Несколько результатов из одной подгруппы - PullRequest
1 голос
/ 19 июня 2010

У меня есть эта строка: <own:egna attribute1="1" attribute2="2">test</own:egna>Я хочу перехватить все атрибуты с помощью регулярного выражения.

Это регулярное выражение соответствует одному атрибуту: (\s+attribute\d=['"][^'"]+['"])Но почему при добавлении символа + `` (\ s + attribute \ d = ['"] [^'"] + ['"]) +` фактически возвращается только последний сопоставленный атрибут, а не все из них?

Как бы вы изменили это, чтобы возвращать все атрибуты в отдельных группах? На самом деле у меня больше регулярных выражений, поэтому использование таких функций, как findall и эквиваленты в python, не поможет.

1 Ответ

0 голосов
/ 19 июня 2010

Короткий ответ: вы не можете - доступна только последняя группа. Документы Python утверждают это явно:

Если группа совпадает несколько раз, доступно только последнее совпадение [...]

Вам придется использовать некоторые языковые функции:

  1. В PHP есть preg_match_all, который возвращает все совпадения.
  2. На других языках вам придется делать это вручную: добавьте модификатор g в регулярное выражение и зациклите его. Например, Perl будет управлять позицией строки и будет возвращать следующее совпадение в $ 1 каждый раз, когда сопоставляется шаблон /([...])/g.

Также взгляните на Захват повторяющейся группы .

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