首页 > 解决方案 > Python:使用正则表达式进行动态匹配

问题描述

我一直在尝试几件事来在正则表达式中使用变量。似乎没有人能够做我需要的事情。

我想在字符串(例如“barbarfoofoofoobarbarbar”)中搜索连续重复的子字符串(例如 foofoofoo)。但是,我需要重复子字符串 (foo) 和重复次数(在本例中为 3)都是动态的,包含在变量中。由于重复的正则表达式是 re{n},这些花括号与我放在字符串中的变量冲突,因为它们也需要花括号。

代码应该匹配 foofoofoo,但不匹配 foo 或 foofoo。

我怀疑我需要使用某种字符串插值。

我试过像

n = 3
str = "foo"
string = "barbarfoofoofoobarbarbar"
match = re.match(fr"{str}{n}", string)

或者

match = re.match(fr"{str}{{n}}", string)

或逃脱

match = re.match(fr"re.escape({str}){n}", string)

但这些似乎都不起作用。有什么想法吗?两条信息都是动态的,而且它只匹配连续的东西,这一点非常重要。也许我可以使用 findall 或 finditer?不知道如何进行。

我根本没有尝试过的东西不是使用正则表达式,而是类似

if (str*n) in string:
    match

我不知道这是否可行,但如果我需要正则表达式的额外功能,我希望能够使用它。

标签: pythonregexvariablesdynamicmatch

解决方案


对于字符串barbarfoofoofoobarbarbar,如果您想捕获foofoofoo,正则表达式将是r"(foo){3}". 如果您想动态执行此操作,则可以执行fr"({your_string}){{{your_number}}}".

如果您想在 f 字符串中使用花括号,请使用{{or }},它将按字面意思打印为{or }

另外,str不是一个好的变量名,因为str它是一个类(字符串类)。


推荐阅读