我正在尝试匹配通过正则表达式解析字符串。这就是我到目前为止所做的:
private string result = @"Range:\s*(?<start>.+\S)\s*to\s*(?<end>.+\S)[\S\s]+For more information, click the link below";
要解析的代码:
start = Convert.ToDateTime(matches.Groups["start"].Value)
end = Convert.ToDateTime(matches.Groups["end"].Value)
这是一个示例字符串输入:
范围:2016年6月8日至2016年6月9日
有关更多信息,请单击该链接 以下
start
变量如下所示:
2016/6/18 12:00:00
end
变量在格式化时引发错误DateTime
。当我输出end
正则表达式匹配的值时,它会出现如下:
2016年6月9日更多信息.....
我的正则表达式中缺少什么?
答案 0 :(得分:1)
使用此模式:
@"Range:(?<start>\w+ \d+, \d+) to (?<end>\w+ \d+, \d+)"
以防万一,你需要匹配第二部分:
@"Range:(?<start>\w+ \d+, \d+) to (?<end>\w+ \d+, \d+)\r\nFor more information, click the link below";
答案 1 :(得分:0)
如果文字For more information, click the link below
没有出现在单独的一行,您将得到您描述的结果。
如果换行符未跟随日期,.+
将消耗所有字符,直到下一个换行符,只有\s
与字符串匹配。这是因为+
贪婪。要使其变得懒惰,请添加问号。因为它很懒,所以你真的不需要捕获组中的\S
:
Range:\s*(.+?)\s*to\s*(.+?)\s*For more information, click the link below
答案 2 :(得分:0)
试试this网站。它生成的正则表达式有点长,但它对我有用。