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

如何修改正则表达式以忽略GUID后的@及后续内容?

修改正则以忽略GUID后的@及后续内容

解决方案正则

^(.*[^0-9])([0-9A-Fa-f]{8}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{12})([^@]*)(?:@.*)?$

修改说明

原正则的第三组(.*)会匹配GUID后的所有内容,包括@及后续字符。我们做了两处关键调整:

  1. 将第三组替换为([^@]*):只匹配非@的任意字符,遇到@就停止,确保@及之后的内容不会进入第三组。
  2. 在末尾添加(?:@.*)?:用非捕获组匹配@及后续所有内容,保证整个输入字符串都能被正则完整匹配,且这部分不会占用分组资源。

匹配验证

示例1:无@的输入

输入:/user/questions/9c8a8823-d88c-4402-a2c1-4530a966f993/help
匹配结果:

  • Group 1: /user/questions/
  • Group 2: 9c8a8823-d88c-4402-a2c1-4530a966f993
  • Group 3: /help

示例2:含@的输入

输入:/user/questions/9c8a8823-d88c-4402-a2c1-4530a966f993@help
匹配结果:

  • Group 1: /user/questions/
  • Group 2: 9c8a8823-d88c-4402-a2c1-4530a966f993
  • Group 3: ``(空字符串)

特殊场景补充

如果需求是只要GUID后出现@,无论GUID与@之间是否有内容,第三组都为空(比如输入/user/questions/guid/abc@help时,第三组也要求为空),可使用支持条件正则的引擎(如Python、PCRE),正则如下:

^(.*[^0-9])([0-9A-Fa-f]{8}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{12})(?(?=@)|.*)$

该正则通过条件判断实现:如果GUID后紧跟@,则第三组匹配空;否则匹配GUID后的所有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:35:16