c#生成正则表达式以接受数值

c#生成正则表达式以接受数值,c#,C#,我正在尝试在字段上生成一个正则表达式,它接受以下内容: 其中X是介于-之前的0-9 so 3个数字和破折号之后的3个数字之间的数值。 我从以下内容开始,但在破折号后添加验证时迷失了方向 ([0-9-])\w+([0-9-]) 3位数字,一个破折号,然后是3位数字: \d{3}-\d{3}我会将行的开头和结尾添加到正则表达式中 ^\d{3}-\d{3}$ ^=在行的开头 \d=一个数字 {3} =三次 -=破折号 \d=一个数字 {3} =三次 $=行的末尾 不设置行首和行尾可能捕获无效模

我正在尝试在字段上生成一个正则表达式,它接受以下内容:

其中X是介于-之前的0-9 so 3个数字和破折号之后的3个数字之间的数值。
我从以下内容开始,但在破折号后添加验证时迷失了方向

([0-9-])\w+([0-9-])

3位数字,一个破折号,然后是3位数字:


\d{3}-\d{3}

我会将行的开头和结尾添加到正则表达式中

^\d{3}-\d{3}$
  • ^=在行的开头
  • \d=一个数字
  • {3} =三次
  • -
    =破折号
  • \d=一个数字
  • {3} =三次
  • $=行的末尾
不设置行首和行尾可能捕获无效模式,例如
Text123-4858


编辑:甚至比直线标记更好,在这种情况下,由Kjartan提出的建议是正确的答案

var example = "123-455";
var pattern = @"\A(\d){3}-(\d){3}\Z";
var result = Regex.Match(example, pattern);
这不仅可以搜索字符串中的模式,还可以确保模式的开头和结尾位于目标字符串的开头和结尾。这可确保您不会获得匹配项,例如:

"silly123-456stuff" or "0123-4567". 

换句话说,它既查找模式,又通过将其锚定到字符串的开头和结尾来限制其长度

请参阅Kjartan的答案,了解如何正确使用锚来界定正则表达式+1,是的,这是一个傻瓜式的解决方案,我现在明白了
"silly123-456stuff" or "0123-4567".