Существует ли Perl-эквивалент re.findall / re.finditer Python (результаты итеративного регулярного выражения)?

В Python скомпилированные шаблоны регулярных выражений имеют метод findall который выполняет следующие действия:

Верните все совпадающие совпадения шаблонов в строке, как список строк. Строка сканируется слева направо, а совпадения возвращаются в найденном порядке. Если одна или несколько групп присутствуют в шаблоне, верните список групп; это будет список кортежей, если шаблон имеет более одной группы. Пустые совпадения включаются в результат, если они не касаются начала другого матча.

Каков канонический способ сделать это в Perl? Наивный алгоритм, о котором я могу думать, соответствует строкам «пока поиск и замена пустой строкой успешно, do [suite]». Я надеюсь, что есть лучший способ. 🙂

Заранее спасибо!

  • Найти весь китайский текст в строке с помощью Python и Regex
  • Регулярное выражение Python для повторения нескольких совпадений
  • Как извлечь символьную ngram из предложений? - python
  • PyCharm 3.1 постоянно висит во время индексации и непригодности
  • Можно ли использовать re2 из Python?
  • Неожиданная ошибка NoReverseMatch при использовании include () в шаблонах URL-адресов
  • Заменить URL-адрес ссылкой с помощью регулярного выражения в python
  • Регулярное выражение python заменяет две ситуации одной командой
  • 3 Solutions collect form web for “Существует ли Perl-эквивалент re.findall / re.finditer Python (результаты итеративного регулярного выражения)?”

    Используйте модификатор /g в вашем матче. Из руководства perlop :

    Модификатор « /g » определяет глобальное сопоставление шаблонов, то есть сопоставление как можно больше в строке. Как он себя ведет, зависит от контекста. В контексте списка он возвращает список подстрок, соответствующих любым скобкам в регулярном выражении. Если круглых скобок нет, он возвращает список всех совпадающих строк, как если бы они были круглыми скобками вокруг всего шаблона.

    В скалярном контексте каждое выполнение « m//g » находит следующее совпадение, возвращает true, если оно соответствует, и false, если дальнейшее совпадение отсутствует. Положение после последнего совпадения можно прочитать или установить с помощью функции pos() ; см. « pos » в perlfunc . Неверное совпадение обычно сбрасывает позицию поиска в начало строки, но вы можете избежать этого, добавив модификатор « /c » (например, « m//gc »). Изменение целевой строки также сбрасывает позицию поиска.

    Чтобы основываться на ответе Криса, вероятно, наиболее уместно помещать регулярное выражение //g в цикле while, например:

     my @matches; while ( 'foobarbaz' =~ m/([aeiou])/g ) { push @matches, $1; } 

    Вставка некоторого быстрого ввода-вывода Python:

     >>> import re >>> re.findall(r'([aeiou])([nrs])','I had a sandwich for lunch') [('a', 'n'), ('o', 'r'), ('u', 'n')] 

    Чтобы получить что-то сопоставимое в Perl, конструкцией может быть что-то вроде:

     my $matches = []; while ( 'I had a sandwich for lunch' =~ m/([aeiou])([nrs])/g ) { push @$matches, [$1,$2]; } 

    Но в целом, независимо от того, какую функцию вы выполняете, вы, вероятно, можете делать внутри цикла while.

    Хорошая ссылка для начинающих с похожим контентом на ответ @kyle : Perl Tutorial: использование регулярных выражений

    Interesting Posts

    Python BaseHTTPServer.HTTPServer – обратный вызов для запуска и остановки события

    Как получить время UTC в Python?

    Массив массива Increment с повторяющимися индексами

    Вывод из моего обнаружения C ++ OpenCV Hough Circle Detection и из моего обнаружения Python OpenCV Hough Circle Detection отличается

    многомерные доверительные интервалы

    Возможно ли реализовать цикл Python для диапазона без переменной итератора?

    Переупорядочение матричных элементов для отражения кластеризации столбцов и строк в naiive python

    Raw_Input () не определен

    Как прочитать файл excel в Python?

    Преобразование строки в двоичный файл в python

    Python – использование регулярных выражений для поиска нескольких совпадений и их распечатки

    Обратный Тан в питоне (tan-1)

    Python: получить выход из командной строки, которая выходит с ненулевым кодом выхода

    как разблокировать (или поворачивать?) в пандах

    Как остановить tkinter после функции?

    Python - лучший язык программирования в мире.