1
這裏是我用找到的形式RB \ d {4},SW \ d {4}和S \ d {4}的中轉號碼代碼:C#模式匹配失敗
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****
對我的生活中,我想不出有什麼不對的正則表達式。任何建議表示讚賞。
問候。
編輯:編輯內部匹配以允許數字與前導零仍然包含零。
非零的目標是什麼?它目前找到一個可能以零開始的數字,並且不包含零。在上面的情況下,它*應該*返回72(至少乍一看)。 – 2012-07-16 01:58:11
你確定你的線條沒有領先空間嗎? – 2012-07-16 01:58:31
解答這兩個問題。如果領先空格,我刪除了「^」,但結果相同。至於非零,我知道每個運輸號碼是由那些特定字母代碼後面的四位數表示的。這些數字可能包含前導零,需要將其剝離以便與不同格式的轉接號碼進行比較。你是對的,內部匹配是不正確的,因爲剝離的數字仍然可以合法包含零 - 但我甚至沒有進入內部代碼。 – Kevin 2012-07-16 02:02:39