正则表达式正确地解析和解析字符串

时间:2016-06-09 19:29:01

标签: c# .net regex

我正在尝试匹配通过正则表达式解析字符串。这就是我到目前为止所做的:

 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日更多信息.....

我的正则表达式中缺少什么?

3 个答案:

答案 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网站。它生成的正则表达式有点长,但它对我有用。