0

您如何表达字符串与以下内容匹配的正则表达式。

text, text, number

笔记:

text = 可以是任意数量的单词或空格。

number = 大多数是 4 位数字。

逗号 (,) 也必须匹配。

例如,以下字符串是有效的:

'Arnold Zend, Red House, 2551'
4

5 回答 5

3

正则表达式模式将是(括号是捕获组,以防您要访问各个项目:

([a-zA-Z\s]{3,}), ([a-zA-Z\s]*{3,}), ([0-9]{4})

它匹配 2 个名称和一个用逗号分隔的 4 位数字,名称长度至少为 3 个字符。如果您愿意,您可以更改名称字符的最小值。这是检查字符串是否与此模式匹配的方法:

// 'Regex' is in the System.Text.RegularExpressions namespace.

Regex MyPattern = new Regex(@"([a-zA-Z\s]*), ([a-zA-Z\s]*), ([0-9]{4})");

if (MyPattern.IsMatch("Arnold Zend, Red House, 2551")) {
    Console.WriteLine("String matched.");
}

我已经用RegexTester测试了表达式,它工作正常。

于 2013-01-17T02:11:36.667 回答
2

我会使用正则表达式:

(?<Field1>[\w\s]+)\s*,\s*(?<Field2>[\w\s]+)\s*,\s*(?<Number>\d{4})

\w= 所有字母(大写和小写)和下划线。+表示一个或多个

\s= 空白字符。*表示零个或多个

\d= 数字 0 到 9。{4}表示它必须是4

(?<Name>)= 捕获要匹配的组名和模式。

您可以将其与命名空间Regex中的对象一起使用System.Text.RegularExpressions,如下所示:

  static readonly Regex lineRegex = new Regex(@"(?<Field1>[\w\s]+)\s*,\s*(?<Field2>[\w\s]+)\s*,\s*(?<Number>\d{4})");

  // You should define your own class which has these fields and out
  // that as a single object instead of these three separate fields.

  public static bool TryParse(string line, out string field1,
                                           out string field2, 
                                           out int number)
  {
    field1 = null;
    field2 = null;
    number = 0;

    var match = lineRegex.Match(line);

    // Does not match the pattern, cannot parse.
    if (!match.Success) return false;

    field1 = match.Groups["Field1"].Value;
    field2 = match.Groups["Field2"].Value;

    // Try to parse the integer value.
    if (!int.TryParse(match.Groups["Number"].Value, out number))
      return false;

    return true;
  }
于 2013-01-17T02:40:22.207 回答
0

要与 Unicode 兼容:

^[\pL\s]+,[\pL\s]+,\pN+$
于 2013-01-17T09:03:34.850 回答
0

尝试这个 -

[\w ]+, [\w ]+, \d{4}
于 2013-01-17T02:26:31.357 回答
0

([a-zA-Z\s]+), ([a-zA-Z\s]+), ([0-9]{4})

于 2013-01-17T02:28:57.530 回答