C#.Net RegEx:前3个字符必须为1-100之间的数字,后3个字符可以为任意字符

时间:2019-05-11 07:24:24

标签: c# .net regex

我正在尝试为控制台应用程序设置RegEx。我的问题是定义RegEx表达式。

我尝试过

  

^([1-9] [0-9]?| ^ 100){3} [a-zA-Z] {3} $

  

^ [0-9] {3} [a-zA-Z] {3} $

但我无法解决。

  

Regex r =新的Regex(@“ ^([1-9] [0-9]?| ^ 100){3} [a-zA-Z] {3} $”);

     

if(r.IsMatch(textBox1.Text)){        MessageBox.Show(“ OK”); }其他{         MessageBox.Show(“ NO”); }

前3位必须是1-100之间的数字,后3位必须是任意三个字符,例如“ 123ABC ”或“ 405006ghd ”或“ 7093zyx < / strong>”。

2 个答案:

答案 0 :(得分:1)

在您的模式中,您可以从^中删除^100,因为它已经在模式开始时指定了。

在您的示例中,数据405006ghd不匹配,因为[1-9][0-9]?不允许前导零,因此它不匹配06

您可以将100,数字1-99或数字0-9与可选的前导零匹配:

^(?:100|[1-9][0-9]|0?[1-9]){3}[a-zA-Z]{3}$

详细

  • ^字符串的开头
  • (?:非捕获组
    • 100字面上匹配
    • |
    • [1-9][0-9]第10场-99场
    • |
    • 0?[1-9]将1-9与可选的前导0匹配
  • ){3}关闭非捕获组并重复3次
  • [a-zA-Z]{3}匹配a-z A-Z 3次
  • $字符串结尾

Regex demo

答案 1 :(得分:-1)

您的描述不是100%清楚。

您的口头描述是:3个字符组成1到100之间的数字,然后3个字符可以是任意字符。

因此,第一个块表示001到100,第二个块是任何字符,因此可以是“ aaa”,也可以是“ 123”或“ ...”

在正则表达式中,您使用了字符串的开头和结尾(^和$),因此匹配必须精确。但是然后您的示例是错误的,因为您提供的示例包含6个以上的字符...

但是让我们开始一些正则表达式的构建: 我们知道,第一个字符是0或1,随后的字符是0-9范围内的字符。因此,我们可以从[01] [0-9] [0-9]开始。 但这还包括000,但我们想从001开始。

因此,我们排除了000: (?!000)[01] [0-9] [0-9]

编辑:我错过了此处的上限100。因此,我建议您使用类似100 | 0 [1-9] [0-9] | 00 [1-9]的方法,该方法不需要任何排除并且更易于阅读。

最后3个字符现在很容易:。{3}可以匹配任意3个字符。

因此,我们得出结论: (?:100 | 0 [1-9] [0-9] | 00 [1-9])。{3}

您可以在https://regex101.com/

处测试正则表达式

当然:如果要完全匹配,则必须再次添加^和$。如果您不想使用任何字符,请替换。加上您要允许的字符。