带变量的Python正则表达式findall

带变量的Python正则表达式findall,python,regex,Python,Regex,我正在尝试使用re.findall和look back,并期待提取数据。当我不使用原始输入变量时,正则表达式可以正常工作,但我需要用户能够输入各种不同的搜索词 以下是当前代码: me = re.findall(r"(?<='(.+)'+variable+'(.+)')(.*?)(?='(.+)+variable+(.+)')", raw) 及 及 及 lookbehind的实现方式(包括它的Python实现)有一个固有的限制,您很遗憾会遇到这个限制:lookbehinds不能是可变长度的

我正在尝试使用re.findall和look back,并期待提取数据。当我不使用原始输入变量时,正则表达式可以正常工作,但我需要用户能够输入各种不同的搜索词

以下是当前代码:

me = re.findall(r"(?<='(.+)'+variable+'(.+)')(.*?)(?='(.+)+variable+(.+)')", raw)


lookbehind的实现方式(包括它的Python实现)有一个固有的限制,您很遗憾会遇到这个限制:lookbehinds不能是可变长度的。“关于查找的重要注意事项”部分解释了原因。不过,我认为您应该能够在没有后顾之忧的情况下执行正则表达式。

我不确定这是否是您的意思,但它可能会让您开始。就我理解你的问题而言,你不需要“回头客”或“回头客”。这适用于Python2.x(不适用于Python3):


如果您确实希望结果中的最后一条“鱼”与上面的注释相同,那么只需从
format()
字符串中删除第二条
{0}

此解决方案应该可以:

me = re.findall(rf"(?<='(.+)'+{variable}+'(.+)')(.*?)(?='(.+)+{variable}+(.+)')", raw)

['regex是最好的']

实际上,我不太确定您在这里想要实现什么。表达式中的
”和
+
”是原始字符串的一部分,因此您没有进行串联。能否提供一个示例字符串以及您希望提取的内容?该字符串的格式如下:raw=“fish,hook,snowned,reveled,boat,fish。”如果fish被设置为变量,我想捕获fish之间的所有单词。输出将是:“钩子,吞下,卷轴,船,鱼。”这是这个问题的重复:不,这是一个不同的问题。这个问题得到了回答。我现在看到了如何使用原始输入变量来指导正则表达式搜索。我刚刚意识到我有多么不清楚。我真的很抱歉,感谢海报的耐心。上述搜索方法的问题是,如果字符串中有多个词(例如“fish、hook、fish、catch、reveel、fish”),那么我只会得到第一个和最后一个“fish”之间的词。我确实需要每个“fish”实例之间的每个词。我使用“look back”和“look forward”方法做这件事没有问题;但是,我不能使用原始输入来指导搜索。如果在
+
之后添加
,此解决方案是否符合您的要求?换句话说,
search\u regex=r“{0}(+?){0}”。格式(由用户输入)
'.*%s.*' % (variable, )
'.*{0}.*'.format(variable)
 '.*{variable}.*'.format(variable=variable)
>>> import re
>>> string_to_search = 'fish, hook, swallowed, reeled, boat, fish'
>>> entered_by_user = 'fish'
>>> search_regex = r"{0}(.+){0}".format(entered_by_user)
>>> match = re.search(search_regex, string_to_search)
>>> if match:
...     print "result:", match.group(1).strip(' ,')
...
result: hook, swallowed, reeled, boat
me = re.findall(rf"(?<='(.+)'+{variable}+'(.+)')(.*?)(?='(.+)+{variable}+(.+)')", raw)
import re

text = "regex is the best"    
var1 = "is the"
var2 = "best"
yes = re.findall(rf"regex {var1} {var2}", text)

print(yes)