【问题标题】:C# .Net RegEx: first 3 char must be a number between 1-100 and second 3 char can be any charC# .Net RegEx:前 3 个字符必须是 1-100 之间的数字,后 3 个字符可以是任何字符
【发布时间】:2019-05-11 07:24:23
【问题描述】:

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

我试过了;

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

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

但我无法解决。

正则表达式 r = new Regex(@"^([1-9][0-9]?|^100){3}[a-zA-Z]{3}$");

if (r.IsMatch(textBox1.Text)) { MessageBox.Show("OK"); } 别的 { MessageBox.Show("否"); }

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

【问题讨论】:

  • one 字符如何介于 1-100 之间?
  • “1”怎么可能是3个字符?
  • “405006ghd”中1-100范围内的三个数字是什么?
  • 试试^(?:100|[1-9][0-9]|0?[1-9]){3}[a-zA-Z]{3}$regex101.com/r/IppdS3/1

标签: c# .net regex


【解决方案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

【讨论】:

    【解决方案2】:

    您的描述不是 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/测试正则表达式

    当然:如果您想要完全匹配,那么您必须再次添加 ^ 和 $。如果您不想要任何字符,请替换 .与你想在那里允许的字符。

    【讨论】:

    • 我刚刚看到,我错过了100的上限。我匹配到199。似乎我在添加排除时忘记了它。所以我们必须使用 100|[0-9][0-9] 得到 ^(?!000)(100|0[0-9][0-9])。{3}$
    • 然后,当我们避免排除并给出数字部分的可能值 100 或 0[1-9][0-9] 或 00[1- 9]: ^(100|0[1-9][0-9]|00[1-9]).{3}$
    猜你喜欢
    • 2013-05-25
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多