2017-09-26 74 views
0

我正在阅读整个txt文件并尝试查找字符串的特定部分。例如,我正在查找字符串“日期:2017年9月23日”。当然,日期将会改变,这不是我的问题。发生的事情是,一旦发现我的匹配,我就会得到整个文件的其余部分。我的问题是我如何告诉它只得到我想要的,而不是文件的其余部分?只用正则表达式提取匹配的文本

我的代码看起来像这样

pattern = @"Date:\s(?'date'\w.*)\s" 
rgx = new Regex(pattern, RegexOptions.Singleline); 
matches = rgx.Matches(fileContents); 

的fileContents看起来是这样的片段:

Date: 23 Sep 2017 

1. In this Agreement, "I", "me" and "my" refers to the account holder. 

回答

1

记住使用量词,更好地满足您的需求:

  • *零个或多个重复
  • +一次或多次重复
  • {m}正好m次重复
  • {m,n}从M到N次重复

如果您确定日期格式为“dd M MM YYYY”,你的模式应该表示为:

或者你可以使用:

@"Date:\s(?'date'\d+\s\w+\s\d+)" 

这是不太严格,但可确保3个部分意味着匹配组中被捕获的当下。

由于它的贪婪性质,在使用*时必须格外小心,否则你会发现你的正则表达式比你想要的要多得多。

1

随着.*,你是匹配任意长度的任何东西,所以它匹配整个文件。

所以,你的正则表达式应该是:

Date:\s(?'date'\d*\s\w*)\s 
  • \ d *一个数字(等同于[0-9])
  • *量词匹配 - 零和无限的时间,尽可能多的匹配比较(等于[\ r \ n \ t \ f \ v])
  • \ w *匹配任何单词字符(等于[a-zA-Z0- 9_])