Regex 我可以缩短这个正则表达式吗?

Regex 我可以缩短这个正则表达式吗?,regex,Regex,我需要检查字符串是否符合特定的ID格式 ID的格式如下所示: aBcDe fghIj KLmno pQRsT uVWxy 由五个字母组成的序列,大写或小写,由一个破折号分隔 我有以下有效的正则表达式: string idFormat = "[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}"; 请注意,没有尾随破折号,但ID中的所有块都遵循相同的格式。因此,我希望能够在正则表达式中用尾随

我需要检查字符串是否符合特定的ID格式

ID的格式如下所示:

aBcDe fghIj KLmno pQRsT uVWxy

由五个字母组成的序列,大写或小写,由一个破折号分隔

我有以下有效的正则表达式:

string idFormat = "[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}";
请注意,没有尾随破折号,但ID中的所有块都遵循相同的格式。因此,我希望能够在正则表达式中用尾随破折号表示这四个块的序列,并避免重复

我尝试了以下方法,但无效:

string idFormat = "[[a-zA-Z]{5}[-]{1}]{4}[a-zA-Z]{5}";
如何缩短此正则表达式并消除重复的部分

确保每个块也不包含任何数字的最佳方法是什么


编辑:

感谢您的回复,我现在理解了正则表达式中的分组

我正在对正则表达式运行一些测试,以下是相关的:

测试1:
aBcDe fghIj KLmno pQRsT uVWxy

测试2:
abcde fghij klmno pqrst uvwxy

使用以下正则表达式,两个测试都通过:

^([a-zA-Z]{5}-){4}[a-zA-Z]{5}$
对于下一个正则表达式,测试1失败:

^([a-z]{5}-){4}[a-z]{5}$
有几个答案说,在使用A-Z时省略A-Z是可以的,但在这种情况下,它似乎不起作用。

您可以尝试:

([a-z]{5}-){4}[a-z]{5}
并使其不区分大小写。

试试看

string idFormat = "([a-zA-Z]{5}[-]{1}){4}[a-zA-Z]{5}";
也就是说,基本上用括号代替括号。括号不是用于分组,而是用于定义一类可接受的字符

但是,请注意,对于缩短版本,可以使用表达式验证字符串,但不能用于分析字符串。如果要处理5组字符,请将它们分为5组:

string idFormat =
    "([a-zA-Z]{5})-([a-zA-Z]{5})-([a-zA-Z]{5})-([a-zA-Z]{5})-([a-zA-Z]{5})";

因此,您可以对每个组进行寻址和处理。

这对我来说很有用,不过您可能需要检查一下:

[a-zA-Z]{5}(-[a-zA-Z]{5}){4}

(一组五个字母,后跟[dash+组五个字母]四次)

如果可以将regex选项设置为不区分大小写,则可以将所有
[a-zA-Z]
替换为纯
[a-Z]
。此外,
[-]{1}
可以写成
-

分组应使用
,而不是
[
]
(尽管在指定字符集时正确使用后者)

根据上下文的不同,您可能希望加入分别匹配字符串开头和结尾的
^…$
,以验证整个字符串是否匹配(即,没有额外的字符)

在javascript中,类似以下内容:

/^([a-z]{5}-){4}[a-z]{5}$/i

很好,我没有想到不区分大小写。请确保在开头/结尾使用
^$
,否则这将与
1651651aBcDe-fghIj-KLmno-pQRsT-uVWxy1625361$%4g$%^$48
;)匹配。不行,这只是用方括号替换圆括号?请查看编辑的帖子,我很难让正则表达式只使用a-z而不是a-zA-Z@fletcher:您需要指定正则表达式不区分大小写。你如何做到这一点取决于你用什么语言。在javascript中,它和
i
一起使用,就像在我的示例中一样,在C#中,它是
newregex(pattern,RegexOptions.IgnoreCase)也有一些情况下不能区分大小写,例如ASP.NET RegexValidator控件,这些控件不实现对RegexOptions的支持,可能还有一些编程语言可能根本不支持它。或者,您可以使用
^(i)([a-z]{5}-{4}[a-z]{5}$
where(i)打开箱子insensitivity@Gary:那应该是
(?i)
,而不是
(i)
。而且,JavaScript不支持它,这可能与OP没有指定一种风格有关,也可能与此无关。
/^([a-z]{5}-){4}[a-z]{5}$/i