You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用f-string拼接的UUID4正则表达式匹配失效问题

问题原因与解决方法

核心问题

你用rf字符串拼接正则时,正则中的量词语法{8}、{4}等会被f-string当成占位符解析,导致正则结构被破坏,最终匹配失败。

f-string会处理所有包裹在{}里的内容,不管它是不是正则语法。比如你写的{8}会被直接替换成数字8,原本的[a-f0-9]{8}就变成了[a-f0-9]8,完全失去了“匹配8个符合规则的字符”的量词作用,自然匹配不上UUID格式。

解决方法

方法1:转义正则中的{}

在f-string里,用双写的{{和}}表示单个的{和},这样f-string处理后会还原正则的量词语法:

#!/usr/bin/python3

import re

PATH_PREFIX = "/a/b/c"
path = "/a/b/c/e72cc82c-e83a-431c-9f63-c8d80eec9307"

if re.match(rf"{PATH_PREFIX}/[a-f0-9]{{8}}-[a-f0-9]{{4}}-4[a-f0-9]{{3}}-[89aAbB][a-f0-9]{{3}}-[a-f0-9]{{12}}$", path):
    print("matched")
else:
    print("didn't match anything")

方法2:拆分字符串拼接

把固定前缀和raw正则部分分开拼接,避免f-string解析正则里的{}:

#!/usr/bin/python3

import re

PATH_PREFIX = "/a/b/c"
path = "/a/b/c/e72cc82c-e83a-431c-9f63-c8d80eec9307"

regex = PATH_PREFIX + r"/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$"
if re.match(regex, path):
    print("matched")
else:
    print("didn't match anything")

补充说明

你之前用f-string处理正则能正常运行,大概率是当时的正则里没有{}这类会被f-string解析的语法,或者采用了其他不会触发f-string占位符解析的拼接方式。

内容的提问来源于stack exchange,提问作者Qiang Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:19