python - 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
我不知道这是否可行,但如果我需要正则表达式的额外功能,我希望能够使用它。
解决方案
对于字符串barbarfoofoofoobarbarbar
,如果您想捕获foofoofoo
,正则表达式将是r"(foo){3}"
. 如果您想动态执行此操作,则可以执行fr"({your_string}){{{your_number}}}"
.
如果您想在 f 字符串中使用花括号,请使用{{
or }}
,它将按字面意思打印为{
or }
。
另外,str
不是一个好的变量名,因为str
它是一个类(字符串类)。
推荐阅读
- c# - 将视频文件作为“FileContentResult”流式传输:无法转发/后退视频内容
- sas - 使用 SAS SGPLOT 在单个图中叠加个人的时间序列和平均值
- matlab - 将一个矩阵除以另一个大小相等的矩阵以获得标量值
- c# - 点击事件改变按钮颜色
- python - 如何获取用户对象以便获取他们的用户名?
- c - 设计时的 C 宏参数测试
- mysql - 如何使用 sql 将文本格式的日期传递给 DATE 格式
- bash - 根据文件中行的可变长度添加和删除列的脚本
- xamarin - 来自嵌套类的 Xamarin Picker 绑定
- android - 在 Kotlin 中有没有办法在一些操作后初始化超类?