2016-12-02 69 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

相关问题