Рубрики
Без рубрики

Python Regex – Как подсчитать количество матчей?

Чтобы подсчитать рисунку Regex несколько раз в данной строке, используйте метод Len (Re.findall (Pattern, String)), который возвращает количество сопоставленных подстроек или Len ([* Re.finditer (Pattern, Text)]), которые распаковывают Все соответствующие подстроки в список и возвращает ее длину. Несколько часов назад я написал регулярное выражение в Python, который соответствовал … Python Regex – Как подсчитать количество матчей? Прочитайте больше “

Автор оригинала: Chris.

Чтобы подсчитать рисунок Regex несколько раз в заданной строке, используйте метод ЛЕН (RE.FINDALL (Узор, строка)) Это возвращает количество сопоставленных подстрок или Лен ([* Re.finditer (шаблон, текст)]) Это распаковывает все соответствующие подстроки в список и возвращает ее длину.

Несколько часов назад я написал Регулярное выражение в Python Это соответствовало не один раз, но несколько раз в тексте и задавался вопросом: Как сосчитать количество матчей?

Рассмотрим минимальный пример, где вы соответствуете произвольному количеству символов слова «[A-Z] + ' В данном предложении «Python - лучший язык программирования в мире» Отказ

Вы можете посмотреть мое видео объяснения, как вы прочитали по учебнику:

Связанная статья: Python Regex SuperPower – Ultimate Guide

Инженеры Google, Facebook и Amazon являются регулярными мастерами. Если вы хотите стать одним, а также проверить нашу новую книгу: Самый умный способ изучить Python Regex (Amazon Kindle/Print, открывается на новой вкладке) Отказ

Сколько матчей в строке? Чтобы подсчитать количество совпадений, вы можете использовать несколько методов:

Метод 1: Python Re.findall ()

Используйте метод Re.findall (Pattern, String), который возвращает список совпадающих подстроек. Затем подсчитайте длину возвращенного списка. Вот пример:

>>> import re
>>> pattern = '[a-z]+'
>>> text = 'python is the best programming language in the world'
>>> len(re.findall(pattern, text))
9

Почему результат 9? Потому что в возвращенном списке Re.findall () Метод:

>>> re.findall(pattern, text)
['python', 'is', 'the', 'best', 'programming', 'language', 'in', 'the', 'world']

Этот метод отлично работает, если есть не перекрывающиеся спички.

Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.

Метод 2: Python Re.finditer ()

Вы также можете подсчитать количество раз данного шаблон Матчи в текст Используя Re.finditer (шаблон, текст) Метод:

Спецификация : Re.finditer ( Pattern , Text , Флаги = 0 )

Определение : возвращает итератор, который проходит через все не перекрывающиеся матчи шаблон В текст Отказ

Флаги Аргумент позволяет настроить некоторые расширенные свойства двигателя REGEX, например, следует ли игнорировать капитализацию символов. Вы можете узнать больше о Флаги аргумент в моем подробном руководстве по блогу Отказ

Пример : Вы можете использовать итератор для подсчета количества совпадений. В отличие от Re.findall () Метод, описанный выше, это имеет преимущество, что вы можете проанализировать сами объекты матча, которые несут гораздо больше информации, чем только соответствующая подстрока.

import re
pattern = '[a-z]+'
text = 'python is the best programming language in the world'
for match in re.finditer(pattern, text):
   print(match)

'''









'''

Если вы хотите сосчитать количество совпадений, вы можете использовать простой Считать Переменная:

import re
pattern = '[a-z]+'
text = 'python is the best programming language in the world'

count = 0
for match in re.finditer(pattern, text):
   count += 1

print(count)
# 9

Или более пифитонское решение:

import re
pattern = '[a-z]+'
text = 'python is the best programming language in the world'

print(len([*re.finditer(pattern, text)]))
# 9

Этот метод отлично работает, если есть не перекрывающиеся спички. Он использует Звездочный оператор * распаковать все значения в утечке.

Метод 3: перекрывающиеся спички

Вышеуказанные два метода работают отлично, если нет перекрытия матчи Отказ Если есть перекрывающиеся спички, двигатель Regex будет просто игнорировать их, потому что он «потребляет» все подходящие подстроки и начинает соответствовать следующему узору только после Стоп Индекс предыдущего матча.

Поэтому, если вам нужно найти количество совпадений совпаданий, вам нужно использовать другой подход.

Идея состоит в том, чтобы отслеживать начальную позицию в предыдущем матче и увеличивать его за один после каждого матча:

import re
pattern = '99'
text = '999 ways of writing 99 - 99999'

left = 0
count = 0
while True:
    match = re.search(pattern, text[left:])
    if not match:
        break
    count += 1
    left += match.start() + 1
print(count)
# 7    

Отслеживая индекс начала предыдущего совпадения в левой переменной, мы можем контролировать, где искать следующий матч в строке. Обратите внимание, что мы используем Python’s Операция нарезки Текст [слева:] Чтобы игнорировать все левые символы, которые уже рассматриваются в предыдущих матчах. В каждом петля Итерация, мы сопоставляем еще один узор в тексте. Это работает, даже если эти совпадения перекрываются.

Куда пойти отсюда

Вы узнали три способа найти количество совпадений данного шаблона в строке.

Если вы боретесь с регулярными выражениями, проверьте наши бесплатные 20 000 слов Regex Учебное пособие На блог Finxter! Это даст тебе Regex Superpowers !

Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.

Курс Python Regex

Инженеры Google являются регулярными мастерами. Система поисковой системы Google – это массивная Текстово-обработка двигателя Это извлекает значение из триллионов веб-страниц.

Инженеры Facebook являются регулярными мастерами экспрессии. Социальные сети, такие как Facebook, WhatsApp, и Instagram Подключите людей через Текстовые сообщения Отказ

Инженеры Amazon являются регулярными мастерами экспрессии. Ecommerce Giants корабля продуктов на основе Описания текстовых продуктов Отказ Регулярные выражения правит игре, когда текстовая обработка соответствует информатике.

Если вы тоже хотите стать регулярным мастером выражения, проверьте Самый полный курс Python Regex на планете:

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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