0

我正在用 C# 编写一个程序,以一般形式处理高速公路指定:

{1-2 个字符}{1-3 个数字}[1-4 个字符]

例如:

  • I70
  • I70BR
  • US550
  • US550Trk

匹配此输入并将前缀(例如,I 或 US)、数字(例如,70 或 550)和可选后缀(例如,BR 或 Trk)存储在数组中的正则表达式可能是什么?的比赛。

问候,吉姆

4

1 回答 1

2

您需要的模式如下:

^([A-Za-z]{1,2})(\d{1,3})([A-Za-z]{0,4})$

您已经说过最后一组介于 1 到 4 个字符之间,但是您在同一个问题中表示它是可选的。我选择了后一个选项,因为并非您提供的所有输入都有后缀。

示例用法:

var input = "US550Trk";
var pattern = @"^([A-Za-z]{1,2})(\d{1,3})([A-Za-z]{0,4})$";
var regex = new Regex(pattern);
var results = regex.Match(input).Groups.
    OfType<Group>().
    Skip(1).
    Select(g => g.Value).
    ToArray();

之所以Skip(1)存在,是因为第一组始终包含整个匹配项。

于 2013-01-07T04:17:56.163 回答