Paul: What a day.
Jacob: Indeed, what a day.
我试图寻找保罗说的话。我尝试通过以下两种方式进行操作:
import regex as re my_first_regex=re.compile(r'(?<=Paul: ).*?(?=\n)') print(my_first_regex.findall("Paul: What a day.\n Jacob: Indeed, what a day\n")) names=['Paul', 'Jacob'] my_second_regex=re.compile(r'(?<=names[0]: ).*?(?=\n)') print(my_second_regex.findall("Paul: What a day.\n Jacob: Indeed, what a day\n"))
[这两种方法之间的唯一区别是,在第一种方法中,我在后面使用了实际名称(Paul:),而在第二种方法中,我使用了变量(names [0]:)。我的问题是:
1)为什么我的第一种方法给我正确的结果(即[“ What a day。”],而第二种方法给我空字符串?
2)如何改进第二种方法,以便为我提供正确的答案?
谢谢您的所有帮助
re.escape
可能接近您的想法:import regex as re
my_first_regex = re.compile(r'(?<=Paul: ).*?(?=\n)')
print(my_first_regex.findall("Paul: What a day.\n Jacob: Indeed, what a day\n"))
names = ['Paul', 'Jacob']
my_second_regex = re.compile(r'(?<=' + re.escape(names[0]) + ': ).*?(?=\n)')
print(my_second_regex.findall("Paul: What a day.\n Jacob: Indeed, what a day\n"))
几乎与:相同
import regex as re string = ''' Paul: What a day. Jacob: Indeed, what a day ''' print(re.findall(r'(?<=Paul: ).*?(?=\n)', string)) names = ['Paul', 'Jacob'] print(re.findall(r'(?<=' + re.escape(names[0]) + ': ).*?(?=\n)', string))
输出
['What a day.'] ['What a day.']
问题是(?<=names[0]: ).*?(?=\n)
确实匹配:
names0: What a day.
不是变量names
。为了解决该问题,我们将使用re.escape()
以便在表达式中包含变量names
。