Функция регулярного выражения для предложения с запятыми и текстом, который может даже превышать строку - PullRequest
0 голосов
/ 11 марта 2020

Я довольно новичок в Python, и я только начал изучать регулярные выражения. Я пытаюсь определить функцию, которая принимает в качестве входных данных строку, возвращающую количество вхождений, где есть экземпляр, где есть что-то вроде «Это моя практика регулярных выражений». Здесь тексты находятся между запятыми, но после обеих запятых есть пробел. Есть шансы, что это произойдет в 2 строки. Но я хочу вычислить, только если он в одной строке.

образец файла https://regex101.com/r/922t4S/1

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

Вот мой код:

def count(filename):
    f = open(filename, 'r')
    x = f.readlines()
#   pattern=re.compile(",\s+\w,")
#   pattern=re.compile(',\s+[a-zA-Z]*\s*,')
    l=0
    for i in x:
        k=re.findall(pattern, i)
        l=l+len(k)
    return l

Я попробовал 2 способа, как прокомментировал, но оба не имеют смысла, когда я пытаюсь визуализировать на тестере регулярных выражений. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 марта 2020

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

,\h*.+?\h*,

Важные особенности этого регулярного выражения:

  • \h соответствует горизонтальному пробелу, поэтому исключаются символы новой строки
  • квантификатор * используется в \h, поскольку между текстом и запятой может быть любое число (включая 0) пробелов
  • . соответствует всем не символам новой строки, в отличие от \w вы использовали, что соответствует только [a-zA-Z0-9_], который не включает пробелы.
  • +? означает «соответствовать лениво ».

РЕДАКТИРОВАТЬ :

Я только что понял, что вы читаете файл строка за строкой и применяете регулярное выражение в строке, поэтому совпадения никогда не будут между строками, даже если вы использовали \s. Тем не менее, мои последние три пули применяются,

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