#python #regex #findall
#python #регулярное выражение #findall
Вопрос:
Почему re.findall возвращает алфавиты вместо слов?
Tint = open('poem.txt')
text1 = Tint.read()
output = []
for line in text1:
line = line.rstrip()
if re.findall(r'bTwinkleb.*?blittleb', text1):
output.append(line)
В настоящее время мой ожидаемый результат — Twinkle Twinkle little
но то, что я получаю с помощью этого кода, T
, w
,…
Я также хочу, чтобы код мог выполнять поиск в следующей строке. Например: если я говорю, re.findall(r'bTwinkleb.*?wonderb', text1)
это должно выдавать Twinkle Twinkle little star How I wonder
. Как я могу это сделать? for line in text1
не помогает.
PS: poem.txt
содержит 4 строки стихотворения Twinkle twinkle little star
Ответ №1:
Ошибка 1: text1
является объектом string, тогда указание for line in text1
означает, что line
это будет символ.
Ошибка 2: Вы каждый раз выполняете поиск во всем текстовом файле text1
, а не в отдельной строке.
Я думаю, вы хотите что-то вроде этого:
Tint=open('poem.txt')
text1=Tint.readlines()
output=[]
for line in text1:
if re.findall(r'bTwinkleb.*?blittleb', line.rstrip()) :
output.append(line)
Обратите внимание на использование readlines()
функции, так что text1
это будет не строка, а массив строк.
Комментарии:
1. Спасибо, это помогло в получении слов в качестве выходных данных вместо алфавита. Теперь результат, который я получаю, — «Мерцающая звездочка». Но я хочу выводить как «Twinkle, Twinkle little». Кроме того, мне нужно, чтобы, если я сделаю это «re.findall(r’ bTwinkle b.*? bwonder b’, line.rstrip()), он мог выдавать мне «Мерцающую звездочку, как мне интересно» PS: poem.txt содержит что-то вроде этого: Мерцай, мерцай, маленькая звездочка, Как мне интересно, кто ты, Так высоко над миром, Обратите внимание: «wonder» в новой строке
Ответ №2:
Я предлагаю взглянуть на документацию re.findall
.
Ответом на вашу конкретную проблему является re.findall(r'bTwinkleb.*?blittleb', text1,re.DOTALL)
или re.findall(r'bTwinkleb.*?blittleb', text1,re.MULTILINE)
.