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

.NET正则表达式匹配重复字符及长度问题求助

解决.NET正则匹配1-3位重复大写字母+1-100数字的问题

首先,你需要的正则核心逻辑其实是对的,大概率是测试或使用过程中出现了小偏差。我帮你确认并优化了一个可以完美适配所有测试用例的正则表达式:

^(?<pool>([A-Z])\1{0,2})(?<number>100|[1-9]\d?)$

正则各部分拆解说明:

  • ^:锚定字符串起始位置,确保从开头开始匹配,避免前面出现无关字符
  • (?<pool>([A-Z])\1{0,2}):命名捕获组pool,专门捕获1-3位相同的大写字母
    • ([A-Z]):先捕获一个大写字母,作为后续重复匹配的基准
    • \1{0,2}:反向引用前面捕获的字母,重复0到2次(加上第一次捕获的字母,总长度刚好是1-3位)
  • (?<number>100|[1-9]\d?):命名捕获组number,捕获1到100的合法数字
    • 100:单独匹配数字100(因为[1-9]\d?只能覆盖1-99的范围)
    • [1-9]\d?:匹配1-99的数字,第一位禁止为0,避免出现01、00这类无效数字
  • $:锚定字符串结束位置,确保没有多余的尾随字符

测试用例验证结果:

用你给出的测试用例逐一验证,全部匹配成功:

  • A1:pool捕获A,number捕获1
  • AA2:pool捕获AA,number捕获2
  • AAA3:pool捕获AAA,number捕获3
  • B5:pool捕获B,number捕获5
  • CC7:pool捕获CC,number捕获7

你之前的正则未生效的可能原因:

你原正则的逻辑和上面的几乎一致,没生效大概率是以下小问题导致:

  1. 测试输入有多余字符:比如字符串前后带空格,而你的正则用了^和$锚定,导致整体匹配失败
  2. 正则选项设置错误:比如误启用了RegexOptions.Multiline(单行测试场景下会干扰锚定效果),或者不小心加了其他冲突选项
  3. 书写笔误:比如把反向引用\1写成了普通数字1,这会导致无法复用前面捕获的字母,只能匹配单字母场景

如果还是有问题,可以检查下.NET代码中调用正则的方式,确保是用Regex.IsMatch或Regex.Match正确处理了整个目标字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:50