C#中的正则表达式条件

时间:2015-11-12 10:21:44

标签: c# regex

根据DB中的州,我有州的州号和州的车辆信件。州号可以是旧的和新的类型。

新型州号的示例。

  • 273KL的 01
  • 002UK的 02
  • 098KZ的 03
  • 120US的 04
  • ...

旧状态编号的示例。

  • - [R 575KMM
  • A 887KDN
  • 中号 784LKA
  • X 647DUA
  • ...

粗体字符表示指定的状态。

用户将输入他的汽车状态编号并选择状态。我需要验证如果州号可以在选定的州注册。如果不可能(错误的用户输入)我将向他显示消息,如"您输入错误的州号或州"

我使用 If-Else 语句完成此操作。但我想通过 正则表达式 了解另一种方式。

我认为,这将是两个条件步骤。

  1. 检查数字是旧类型(以字母开头),如果是,则从DB状态字母获取并使用 正则表达式 语句检查。
  2. 如果案例1为false,我会从DB状态数字中获取并使用 正则表达式 语句进行检查。
  3. 第一个条件我有 正则表达式 声明:

    ^(?i)f - 州字母为f

    • 我的第二个条件的正则表达式是什么?
    • 或者可以用一个 正则表达式 语句完成(两个步骤)吗?

2 个答案:

答案 0 :(得分:2)

以下是您的需求:

^[Aa].*[01][2]$

有几点解释:

^ assert position at start of a line
[Aa] match a single character present in the list below
    Aa a single character in the list Aa literally

.* matches any character (except newline)
    Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]

[01] match a single character present in the list below
    01 a single character in the list 01 literally

[2] match a single character present in the list below
    2 the literal character 2

$ assert position at end of a line

如果您需要以任何字母

开头
^[A-Za-z].*[01][2]$

鉴于您的编辑:

我会使用这个正则表达式:

^[A-Z].{6}|.{5}\d{2}$

保证输入是:

  • 长度为7;
  • 以大写字母开头,以两位数
  • 结束

答案 1 :(得分:2)

正如您进一步解释的那样,您确实希望在开头匹配任何字母,并在字符串末尾任意两位数字,使用正则表达式是确实是解决这个问题的最短途径。

Regex re = new Regex("^[a-z].*[0-9]{2}$", RegexOptions.IgnoreCase);

Console.WriteLine(re.IsMatch("Apple02")); // true
Console.WriteLine(re.IsMatch("Arrow")); // false
Console.WriteLine(re.IsMatch("45Alty12")); // false
Console.WriteLine(re.IsMatch("Basci98")); // true

否则,如果您的要求很简单,例如只是开头的Aa字母,最后是1202,那么您也可以在没有正则表达式的情况下轻松解决此问题:

bool Match(string s)
{
    if (string.IsNullOrWhiteSpace(s))
        return false;

    if (s[0] != 'a' && s[0] != 'A')
        return false;

    return s.EndsWith("02") || s.EndsWith("12");
}

示例:

Console.WriteLine(Match("Apple02")); // true
Console.WriteLine(Match("Arrow")); // false
Console.WriteLine(Match("45Alty12")); // false
Console.WriteLine(Match("a12")); // true
Console.WriteLine(Match("a")); // false
Console.WriteLine(Match("12")); // false

当然,您也可以扩展它以满足您更复杂的要求。在您的情况下,您可以使用char.IsLetterchar.IsDigit进行检查:

bool Match(string s)
{
    if (string.IsNullOrWhiteSpace(s))
        return false;

    return s.Length > 2 && char.IsLetter(s[0]) &&
        char.IsDigit(s[s.Length - 1]) && char.IsDigit(s[s.Length - 2]);
}

请注意,IsLetter方法也接受来自非英文字母的字母,因此您可能需要更改它。你也可以像这样进行比较:

bool Match(string s)
{
    if (string.IsNullOrWhiteSpace(s))
        return false;

    return s.Length > 2 &&
        ((s[0] >= 'a' && s[0] <= 'z') || (s[0] >= 'A' && s[0] <= 'Z'))
        char.IsDigit(s[s.Length - 1]) && char.IsDigit(s[s.Length - 2]);
}