C#正则表达式组合

C#正则表达式组合,c#,regex,C#,Regex,我只是想知道我是否能把这两个表达组合成一个 Regex comb1 = new Regex("[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}"); Regex comb2 = new Regex("[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}"); 通常,您会使用交替(|)来匹配多个模式中的一个。例如: aaa|bbb 将首先尝试匹配模式aaa,然后尝试模式bbb 但是,由于您的模式非常

我只是想知道我是否能把这两个表达组合成一个

 Regex comb1 = new Regex("[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}");
 Regex comb2 = new Regex("[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}");

通常,您会使用交替(
|
)来匹配多个模式中的一个。例如:

aaa|bbb
将首先尝试匹配模式
aaa
,然后尝试模式
bbb

但是,由于您的模式非常相似,您可以使用以下内容:

[A-Z0-9]{4,6}(-[A-Z0-9]{4,6}){2,3}

这将匹配由四到六个字母数字字符组成的任意序列,后跟连字符和四到六个字母数字字符,这些字符必须重复两到三次。

通常,您会使用交替(
|
)来匹配多个模式中的一个。例如:

aaa|bbb
将首先尝试匹配模式
aaa
,然后尝试模式
bbb

但是,由于您的模式非常相似,您可以使用以下内容:

[A-Z0-9]{4,6}(-[A-Z0-9]{4,6}){2,3}

这将匹配由四到六个字母数字字符组成的任意序列,后跟连字符和四到六个字母数字字符,必须重复两到三次。

如果模式中有可选部分,则可以使用
(OptionalPattern)?
,这样您的代码就可以变成:

[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}(-[A-Z0-9]{4,6})?

但是pswg的
{2,3}
在这里是一个更好的选择,因为它还消除了模式中不必要的重复。我只是提一下,因为它在类似的情况下很有用。

如果模式中有可选部分,可以使用
(OptionalPattern)?
,这样您的代码就可以变成:

[A-Z0-9]{4,6}-[A-Z0-9]{4,6}-[A-Z0-9]{4,6}(-[A-Z0-9]{4,6})?

但是pswg的
{2,3}
在这里是一个更好的选择,因为它还消除了模式中不必要的重复。我只是提一下,因为它在类似的情况下很有用。

+1很好的直接答案(使用
|
)以及替代正则表达式。非常感谢,非常有用!这与[A-Z0-9]{4,6}的概念相同。@user3381113这是正确的。可以以完全相同的方式应用于字符、字符类或组。+1很好的直接答案(使用
|
)以及替代正则表达式。非常感谢,非常有用!这与[A-Z0-9]{4,6}的概念相同。@user3381113这是正确的。可以以完全相同的方式应用于字符、字符类或组。