为什么re.findall()没有去下一行的txt文件来搜索字母?

问题描述 投票:0回答:2

为什么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,但我得到的代码是Tw,...

我还希望代码能够在下一行搜索。例如:如果我说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

python regex findall refind
2个回答
1
投票

错误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就不会是一个字符串而是一个行数组。


1
投票

我建议看看documentationre.findall

你的具体问题的答案是re.findall(r'\bTwinkle\b.*?\blittle\b', text1,re.DOTALL)orre.findall(r'\bTwinkle\b.*?\blittle\b', text1,re.MULTILINE)

© www.soinside.com 2019 - 2024. All rights reserved.