2016-12-02 76 views
5

我有下面的文本行,我打算在 「」,I,E後,以提取 「日期」, 2015年9月1日正則表達式格式返回空結果 - C#

分配/束報告10835.0000天數報告步驟228,2015年9月1日

我寫了下面的正則表達式代碼,它在匹配中返回空。

`Regex regexdate = new Regex(@"\Allocation/bundle\s+\report\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\,\+(\S)+\s+(\S)+\s+(\S)"); // to get dates 

MatchCollection matchesdate = regexdate.Matches(text); 

你能告訴我提到的正則表達式格式有什麼問題嗎?

+1

'\ A'是錨定斷言字符串的開始。你一定是指'A'。 '(\ S)+'必須變成'(\ S +)'。另外,'\ r'是一個回車匹配模式,再次刪除反斜槓 –

回答

5

\A是一個聲明字符串開始的錨點。你一定意思是A(\S)+必須變成(\S+)。另外,\r是一個回車匹配模式,再次刪除反斜槓以將\r轉換爲r

使用

@"Allocation/bundle\s+report\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\,\s+(\S+)\s+(\S+)\s+(\S+)" 

regex demo

enter image description here

注意,正則表達式的最後部分可以由更多的具體的匹配1+數字,那麼一些字母,然後4位數字:(\S+)\s+(\S+)\s+(\S+) - >(\d+)\s+(\p{L}+)\s+(\d{4})

+1

謝謝!這很棒。作品!! – user7157732

5

你可以不用正則表達式嗎?以下是使用LINQ的一些幫助的示例。

var text = "Allocation/bundle report 10835.0000 Days report step 228, 1 Sep 2015"; 

var sDate = text.Split(',').Last().Trim(); 

if (string.IsNullOrEmpty(sDate)) 
{ 
    Console.WriteLine("No date found."); 
} 
else 
{ 
    Console.WriteLine(sDate); // Returns "1 Sep 2015" 
} 
+0

我也喜歡這種方法。我應該提到我的文字有多行。因此,這可能行不通!但我肯定會在其他情況下使用它! – user7157732

+2

@ user7157732每行只需應用此邏輯。 – juharr

+0

哦,coool! thnx @Noppadet – user7157732