Python: 用正则表达式进行动态匹配

问题描述 投票:0回答:1

我已经尝试了几种在正则表达式中使用变量的方法。但似乎都不能满足我的需求。

我想在一个字符串(例如 "barbarfoofooffoobarbar")中搜索一个连续重复的子串(例如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

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

python regex variables dynamic match
1个回答
1
投票

对于字符串 barbarfoofoofoobarbarbar如果你想捕捉 foofoofoo,regex将是 r"(foo){3}".如果你想动态地做这个,你可以做的是 fr"({your_string}){{{your_number}}}".

如果你想在f弦中使用卷曲的括号,你可以使用 {{}} 而它会被印刷成 {}.

还有: str 不是一个好的变量名,因为 str 是一个类(字符串类)。

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