【发布时间】:2020-08-30 07:34:30
【问题描述】:
我一直在尝试几种方法来在正则表达式中使用变量。似乎没有人能够满足我的需求。
我想在字符串(例如“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
我不知道这是否可行,但如果我需要正则表达式的额外功能,我希望能够使用它。
【问题讨论】:
-
this 回答你的问题了吗?
-
match()仅匹配字符串的开头。所以即使你弄清楚了转义,你仍然不会得到匹配(foo){3}这很丑但匹配:match = re.search(fr"({s}){{{n}}}", string)(使用双括号作为文字括号)。 -
遗憾的是,事实并非如此,因为在这种情况下,他不必在正则表达式中使用花括号。我检查了其他问题,没有一个有效。
-
实际上有一个部分叫做“大括号”。也许我错过了什么。
-
@LuiMartinezLaskowski 您需要大括号为 f 字符串插入变量,但您还需要双大括号将文字大括号字符放入正则表达式的字符串中。您可以只查看由正则表达式上下文之外的变体创建的字符串。
标签: python regex variables dynamic match