2015-07-13 58 views
1

你好,你可以有人幫助我一個問題,我想這3個正則表達式行被修改成一個單一的正則表達式行。 使用C#正則表達式正則表達式解決方案與可選

(?<reportName>\w+)(_[0-9])_v(?<reportVersion>\d+).tsd for === FBN001_v7.tsd 
(?<reportName>\w+)_v(?<reportVersion>\d+).tsd for === FBN014B_2_v4.tsd 
(?<reportName>\w+).tsd === for FBN002A.tsd 
+0

'爲=== FBN001_v7.tsd'這是正則表達式的一部分嗎? –

+0

使用?表示0或1次。在'.tsd'之後你並不需要解析任何東西。試試這個:(? \ w +)(_ [0-9])?(_ v)?(? \ d +)?tsd – jdweng

+0

for === FBN001_v7.tsd不是正則表達式的一部分 –

回答

0

您可以嘗試

(?<reportName>[a-zA-Z0-9]+)(?:_[0-9]+)*(?:_v(?<reportVersion>\d+))?\.tsd 

demo

你需要躲避.,因爲你想匹配一個.。如果你不逃避它,.在正則表達式匹配任何字符(但換行符在這裏)。

enter image description here

+0

謝謝這工作,但它dosent捕獲變量的報告版本 –

+0

對不起,我被你的問題的風格誤導。我更新了我的答案,請檢查。 –

+0

它適合你嗎? –

0
string txt = @"for === FBN001_v7.tsd 
=== for FBN002A.tsd 
for === FBN014B_2_v4.tsd"; 
string patten = @"(?<reportName>\w+?)((_[0-9])?_v(?<reportVersion>\d+))?\.tsd"; 
foreach (Match match in Regex.Matches(txt, patten)) 
{ 
    Console.Write("reportName:" + match.Groups["reportName"].Value + " "); 
    if (match.Groups["reportVersion"].Success) 
    { 
     Console.WriteLine("reportVersion:" + match.Groups["reportVersion"].Value); 
    } 
    Console.WriteLine(); 
    Console.WriteLine("------------------------"); 
} 

我覺得for === FBN001_v7.tsd是你的正則表達式的演示