Почему re.findall () не переходит к следующей строке текстового файла для поиска букв? - PullRequest
0 голосов
/ 26 марта 2019

Почему re.findall возвращает алфавит вместо слов?

Tint = open('poem.txt')
text1 = Tint.read()
output = []
for line in text1:
    line = line.rstrip()
    if re.findall(r'\bTwinkle\b.*?\blittle\b', text1):
        output.append(line)

В настоящее время мой ожидаемый результат - Twinkle Twinkle little, но с этим кодом я получаю T, w, ...

Я также хочу, чтобы код можно было искать в следующей строке. Например: если я скажу re.findall(r'\bTwinkle\b.*?\wonder\b', text1), это должно дать Twinkle Twinkle little star How I wonder. Как я могу это сделать? for line in text1 не помогает.

PS: poem.txt содержит 4 строки стихотворения Twinkle twinkle little star

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Предлагаю посмотреть документацию из re.findall.

Ответ на вашу конкретную проблему: re.findall(r'\bTwinkle\b.*?\blittle\b', text1,re.DOTALL) или re.findall(r'\bTwinkle\b.*?\blittle\b', text1,re.MULTILINE).

1 голос
/ 26 марта 2019

Ошибка 1 : text1 - это строковый объект, поэтому указание for line in text1 означает, что line будет символом.

Ошибка 2 :Вы ищете каждый раз во всем text1, а не в одной строке.

Я думаю, вы хотите что-то вроде этого:

Tint=open('poem.txt')
text1=Tint.readlines()
output=[]
for line in text1:
    if re.findall(r'\bTwinkle\b.*?\blittle\b', line.rstrip()) :
        output.append(line)

Обратите внимание на использование функции readlines(),так что text1 будет не строкой, а массивом строк.

...