我有下面的文字行,我打算提取"日期"在",",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格式有什么问题提出建议?
答案 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
请注意,正则表达式的最后一部分可能会更具体,以匹配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"
}