我需要检查字符串是否符合特定的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,但在这种情况下它似乎没有用。
答案 0 :(得分:7)
您可以尝试:
([a-z]{5}-){4}[a-z]{5}
并使其不区分大小写。
答案 1 :(得分:6)
如果您可以将regex选项设置为不区分大小写,则可以使用普通[a-zA-Z]
替换所有[a-z]
。此外,[-]{1}
可以写为-
。
您的分组应该使用(
,)
,而不是[
,]
(虽然您在指定字符集时正确使用后者。
根据上下文,您可能希望分别输入匹配字符串开头和结尾的^...$
,以验证整个字符串是否匹配(即没有额外的字符)。
在javascript中,类似这样:
/^([a-z]{5}-){4}[a-z]{5}$/i
答案 2 :(得分:1)
这对我有用,但您可能需要查看它:
[a-zA-Z]{5}(-[a-zA-Z]{5}){4}
(一组五个字母,然后是[破折号+五个字母组]四次)
答案 3 :(得分:0)
尝试
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})";
所以你可以解决每个小组并处理它。
答案 4 :(得分:0)
([a-zA-Z]{5}[-]{1}){4}[a-zA-Z]{5}