.net 正则表达式中的分组

.net 正则表达式中的分组,.net,regex,.net,Regex,我想用正则表达式做一个匹配 它必须将的字符串与以下格式匹配: 以C或H开头,后跟6个字符。(共7个字符长) 以KK开头,后面有8个字符。(共10个字符长) 该字段最多可输入10个字符。我有以下资料: ((C | H.{6})|(KK.{8})) 它与KK+8很匹配。它在C+5上失败,很好。它在C+6上很成功。然而,它在C+7、C+8和C+9上成功了 我假设我的分组是错误的,有人能指出我的错误吗 这是.NET风格的正则表达式,我使用Regex.IsMatch来确定字段是否与我的正则表达式完全匹配。

我想用正则表达式做一个匹配

它必须将的字符串与以下格式匹配:

以C或H开头,后跟6个字符。(共7个字符长) 以KK开头,后面有8个字符。(共10个字符长)

该字段最多可输入10个字符。我有以下资料:

((C | H.{6})|(KK.{8}))

它与KK+8很匹配。它在C+5上失败,很好。它在C+6上很成功。然而,它在C+7、C+8和C+9上成功了

我假设我的分组是错误的,有人能指出我的错误吗

这是.NET风格的正则表达式,我使用Regex.IsMatch来确定字段是否与我的正则表达式完全匹配。

您需要输入字符串的开头(
^
)和结尾(
$
):

^([CH].{6}|KK.{8})$
我还删除了不必要的括号,并将
(C | H)
更改为a以提高可读性。

您需要删除字符串的开头(
^
)和结尾(
$
):

^([CH].{6}|KK.{8})$

我还删除了不必要的括号,并将
(C | H)
更改为a以提高可读性。

您想从模式中捕获任何内容吗? 如果不是,我会试试这个:

^(KK..|C|H).{6}$

你想从模式中捕获任何东西吗? 如果不是,我会试试这个:

^(KK..|C|H).{6}$

您需要添加行的起点和终点:


您需要添加行的起点和终点:


我最喜欢Mark Byers的答案,有了这个修改(针对.NET测试):


对于C或H后面超过6个字符的值,原始版本将给出错误匹配。

我最喜欢Mark Byers的答案,经过此修改(针对.NET测试):


对于C或H之后超过6个字符的值,原始值将给出错误匹配。

有趣的是,我的印象是IsMatch确保了整个字符串的匹配,我想我错了。谢谢@Aequitarum Custos:您可能已经想到了Java中类似命名的方法
matches
,它需要精确匹配。啊哈,是的,您是对的,.NET也有同样的东西。不用于验证输入字符串,用于解析。解释了我的困惑。有趣的是,我觉得IsMatch确保了整个字符串匹配,我想我错了。谢谢@Aequitarum Custos:您可能已经想到了Java中类似命名的方法
matches
,它需要精确匹配。啊哈,是的,您是对的,.NET也有同样的东西。不用于验证输入字符串,用于解析。解释了我的困惑。+1表示功能和简单。我相信以上是我的方法的正确方法,尽管这些字符串格式是状态指定的,并且可以独立于另一个进行更改。+1是功能性的和更简单的。我相信上述方法是正确的,尽管这些字符串格式是状态指定的,并且可以独立于其他格式进行更改。