gpt4 book ai didi

python - re.findall() 与它的发现不匹配

转载 作者:行者123 更新时间:2023-11-28 21:48:52 25 4
gpt4 key购买 nike

我有一个文本文件,其中包含如下行:

<pattern number=1 theme=pseudo>
<pattern number=2 theme=foo>
<pattern number=3 theme=bar>

我正在使用此功能选择一个随机行:

def find_random_pattern(theme):
found_lines = []
pattern = open('poempatterns.txt','r')
for line in pattern:
found = re.findall("theme="+theme,line)
for match in found:
found_lines.append(line)

selectedline = random.choice(found_lines)
return selectedline

假设它返回了 <pattern number=1 theme=pseudo>

当我用这个条件检查它时,它返回 False

if find_random_pattern("pseudo") == "<pattern number=1 theme=pseudo>":
return True
else:
return False

为什么这两个字符串不匹配?

最佳答案

您期望 re.findall 返回整行,但它返回匹配的部分:

>>> line = "<pattern number=1 theme=pseudo>"
>>> import re
>>> re.findall("theme=pseudo", line)
['theme=pseudo']

我建议你使用匹配整行的模式,例如:

>>> re.findall(".*theme=pseudo.*", line)
['<pattern number=1 theme=pseudo>']

您的最终代码如下所示:

def find_random_pattern(theme):
found_lines = []
pattern = open('poempatterns.txt','r')
for line in pattern:
# Call strip() just in case you have some blank spaces or \n at the end
found = re.findall(".*theme=%s.*" % theme, line.strip())
for match in found:
found_lines.append(line)

selectedline = random.choice(found_lines)
return selectedline

一个更简洁的解决方案是:

import random
import re
import string

def find_random_pattern(theme):
lines = open('poempatterns.txt','r').readlines()
stripped_lines = map(string.strip, lines)
found_lines = filter(lambda l: re.match(".*theme=%s.*" % theme, l), stripped_lines)
return random.choice(found_lines)

关于python - re.findall() 与它的发现不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com