正则表达式格式返回空结果 - C#

时间:2016-12-02 19:29:12

标签: c# regex

我有下面的文字行,我打算提取"日期"在",",i,e之后 2015年9月1日

分配/捆绑报告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);

您能否就我提到的Regex格式有什么问题提出建议?

2 个答案:

答案 0 :(得分: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 :(得分: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"
}