C#模式匹配失败

时间:2012-07-16 01:50:58

标签: c# regex pattern-matching

以下是我用来查找RB \ d {4},SW \ d {4}和S \ d {4}格式的转接号码的代码:

Regex transitRegex = new Regex("^(RB|SW?)(<?transit>\\d{4}).*");
Match m1 = transitRegex.Match(transitNumber);
if (m1.Success)
{
    Regex transitRegexNoZeroes = new Regex("0+(<?transitNoZeroes>\\d+)");
    Match m2 = transitRegexNoZeroes.Match(m1.Groups["transit"].Value);
    if (m2.Success)
    {
        transitNumber = m2.Groups["transitNoZeroes"].Value.ToString();
        MessageBox.Show(transitNumber, "Transit Number", MessageBoxButtons.OK);
    }
    else
    {
        transitNumber = m1.Groups["transit"].Value.ToString();
    }
}
else
{
    MessageBox.Show("Could not find transit number in " + transitNumber, "Parsing Error", MessageBoxButtons.OK);
}

但是我没能匹配任何线路。以下是失败行的示例:

RB80720C1XX -  Intermittent COMM lOSS ****CHRONIC**** 

对于我的生活,我无法弄清楚正则表达式有什么问题。任何建议都表示赞赏。

问候。

编辑:编辑内部匹配以允许带有前导零的数字仍包含零。

1 个答案:

答案 0 :(得分:3)

你的第一个模式有点偏。试试这个:

@"^(RB|SW?)(?<transit>\d{4})"

注意,问号的位置。您可以测试模式here