我有一个正则表达式需要捕获字母部分。这些字母可以是1-3个字符的长度,但必须是相同的字母。不支持ABC,但支持A、AA或AAA,后面跟着一个数字。目前我只能匹配A1,无法匹配AA1。我正在使用.NET进行正则表达式匹配。
^(?<pool>([A-Z])\1{0,2})(?<number>(100)|[1-9]\d?)$
A1
AA2
AAA3
B5
CC7
我有一个正则表达式需要捕获字母部分。这些字母可以是1-3个字符的长度,但必须是相同的字母。不支持ABC,但支持A、AA或AAA,后面跟着一个数字。目前我只能匹配A1,无法匹配AA1。我正在使用.NET进行正则表达式匹配。
^(?<pool>([A-Z])\1{0,2})(?<number>(100)|[1-9]\d?)$
A1
AA2
AAA3
B5
CC7
\b(([A-Z])\2{0,2}(?:100|[1-9]\d?))\b
它接受:A1 AA2 AAA3 B5 CC7
,但不匹配AAAA4
或ABC123
如果您想使用命名捕获组和对它们的反向引用,则可以将您的正则表达式更改为:
^(?<pool>([A-Z]))\k<pool>{0,2}(?<number>(100|[1-9]\d?))$
演示,如果你觉得可以的话,请告诉我,还可以看看:
https://www.regular-expressions.info/named.html
最后但并非不重要的是,如果您想让命名捕获组<pool>
匹配并捕获A
、AA
或AAA
,您可以使用:
^(?<pool>([A-Z])\2{0,2})(?<number>(100|[1-9]\d?))$
仅使用命名捕获组:
^(?<pool>(?<letter>[A-Z])\k<letter>{0,2})(?<number>(100|[1-9]\d?))$
\1
作为反向引用。请参考我的回答。 - wp78de^(?<pool>([A-Z])\1{0,2})(?<number>(100|[1-9]\d?))$
参考MSDN:正则表达式中的分组构造 因此,虽然使用括号捕获的内容将自动从左到右编号,基于正则表达式中开放括号的顺序,从1开始。编号为零的捕获是整个正则表达式模式匹配的文本。
1a1
,可以使用(?<named>(\d)a)\1
(?<named>(\d)a)\2
\b(?<pool>([A-Z])\1{0,2})(?<number>(\d{1,2}(?!\d)|100))\b
,但后来注意到上述差异。您还可以在链接的演示中尝试使用\1
与\2
。