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

use*_*732 5 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);
Run Code Online (Sandbox Code Playgroud)

您能否就我提到的正则表达式格式有什么问题提出建议?

Wik*_*żew 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+)"
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

在此输入图像描述

请注意,正则表达式的最后一部分可能会更具体,以匹配1+位数,然后是一些字母,然后是4位数:(\S+)\s+(\S+)\s+(\S+)- >(\d+)\s+(\p{L}+)\s+(\d{4})


Nop*_*det 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"
}
Run Code Online (Sandbox Code Playgroud)

  • @ user7157732每行只应用此逻辑. (2认同)