在[重复项]中的变量

问题描述 投票:0回答:1
我想在环顾四周(尤其是向后看)中使用变量,但是我不确定该怎么做。假设您有以下文本:

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)如何改进第二种方法,以便为我提供正确的答案?

谢谢您的所有帮助

python regex variables regex-lookarounds
1个回答
0
投票
也许,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

RegEx Demo

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