Regex 我可以缩短这个正则表达式吗?
我需要检查字符串是否符合特定的ID格式 ID的格式如下所示: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中的所有块都遵循相同的格式。因此,我希望能够在正则表达式中用尾随
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