Как подсчитать количество вхождений слова, следующего за специальным символом в тексте, с помощью регулярного выражения Python

Я хочу подсчитать количество вхождений слова «люди» в текст с помощью Python. Для этого я использую регулярное выражение Counter и Python:

    for j in range(len(paragraphs)):
        text = paragraphs[j].text
        count[j] = Counter(re.findall(r'\bpeople\b' ,text))

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

Спасибо за помощь,

Ваше регулярное выражение выглядит правильно (и работает для моих тестов). Думаю ваша ошибка - Counter(). Какую ошибку вы видите?

user590028 23.10.2018 20:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
60
4

Ответы 4

Вы можете использовать необязательную группу символов в своем регулярном выражении:

r'\bpeople[.,!?]?\b'

? указывает, что это может произойти 0 или 1 раз - [] указывает, какие символы разрешены. Нет необходимости экранировать . (или, например, ()*+?) внутри [], хотя они имеют особое значение для регулярных выражений. Если вы хотите использовать - внутри [], вам нужно будет экранировать его, поскольку он используется для обозначения диапазонов в наборах [1-5] == 12345.

См .: https://docs.python.org/3/library/re.html#regular-expression-syntax

[] Used to indicate a set of characters. In a set:

Characters can be listed individually, e.g. [amk] will match 'a', 'm', or 'k'. Ranges of characters can be indicated by giving two characters and separating them by a '-', for example [a-z] will match any lowercase ASCII letter, [0-5][0-9] will match all the two-digits numbers from 00 to 59, and [0-9A-Fa-f] will match any hexadecimal digit. [...]

people[?.!]

Это позволит вам совпадать только с людьми? люди. и / или люди!

Итак, если вы добавите еще несколько Counter(re.finall(, вы сможете сделать что-то вроде этого

#This will only match people
count[j] = Counter(re.findall(r'people\s' ,text))

#This will only match people?
count[j] = Counter(re.findall(r'people\?' ,text))

#This will only match people.
count[j] = Counter(re.findall(r'people\.' ,text))

#This will only match people!
count[j] = Counter(re.findall(r'people\!' ,text))

Вам необходимо использовать \ для экранирования специальных символов.

Также это хороший ресурс, когда вы экспериментируете с регулярными выражениями Python: https://pythex.org/ На сайте также есть шпаргалка по регулярным выражениям.

нет необходимости помещать | в [], если вы не хотите разрешить его также как символ

Patrick Artner 23.10.2018 20:19

Вы можете использовать оператор-модификатор в конце части «люди» вашего шаблона Regex. Попробуйте следующее:

for j in range(len(paragraphs)):
    text = paragraphs[j].text
    count[j] = Counter(re.findall('r\bpeople[.?!]?\b', text)

? для ноль или более кванторов. Вышеупомянутый шаблон, похоже, работает на regex101.com, но я еще не пробовал использовать оболочку Python.

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

Clay Raynor 23.10.2018 20:26

Обязательно ли использовать регулярное выражение? Почему не просто:

len(text.split("people"))-1

Другие вопросы по теме