我需要检查字符串是否符合特定的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}";
Run Code Online (Sandbox Code Playgroud)
请注意,没有尾随短划线,但ID中的所有块都遵循相同的格式.因此,我希望能够在正则表达式中用尾随破折号表示这四个块的序列,并避免重复.
我尝试了以下,但它不起作用:
string idFormat = "[[a-zA-Z]{5}[-]{1}]{4}[a-zA-Z]{5}";
Run Code Online (Sandbox Code Playgroud)
如何缩短此正则表达式并删除重复的部分?
确保每个块也不包含任何数字的最佳方法是什么?
编辑:
感谢您的回复,我现在理解正则表达式中的分组.
我正在针对正则表达式运行一些测试,以下是相关的:
测试1:aBcDe-fghIj-KLmno-pQRsT-uVWxy
测试2:abcde-fghij-klmno-pqrst-uvwxy
使用以下正则表达式,两个测试都通过:
^([a-zA-Z]{5}-){4}[a-zA-Z]{5}$
Run Code Online (Sandbox Code Playgroud)
使用下一个正则表达式,测试1失败:
^([a-z]{5}-){4}[a-z]{5}$
Run Code Online (Sandbox Code Playgroud)
有几个答案说可以在使用az时省略AZ,但在这种情况下它似乎不起作用.
如果您可以将regex选项设置为不区分大小写,则可以[a-zA-Z]使用plain 替换all [a-z].此外,[-]{1}可以写成-.
您的分组应该做(,)不与[,](虽然你正确使用后者指定字符集.
根据上下文,您可能希望分别引入^...$哪个匹配字符串的开头和结尾,以验证整个字符串是否匹配(即没有多余的字符).
在javascript中,这样的事情:
/^([a-z]{5}-){4}[a-z]{5}$/i
Run Code Online (Sandbox Code Playgroud)