我正在读取整个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.
答案 0 :(得分:1)
使用.*
,您可以匹配任何长度的任何内容,因此它与整个文件匹配。
所以,你的正则表达式应该是:
Date:\s(?'date'\d*\s\w*)\s
*
量词 - 在零和无限次之间匹配,尽可能多次,根据需要返回\ s匹配任何空格字符(等于[\ r \ n \ t \ f \ v])< / LI>
答案 1 :(得分:1)
请记住使用更适合您需求的量词:
*
零次或多次重复+
一次或多次重复{m}
完全重复{m,n}
从m到n次重复如果您确定日期的格式为&#34; dd MMM yyyy&#34;,您的模式应表示为:
@"Date:\s(?'date'\d{2}\s\w{3}\s\d{4})"
或者您可以使用:
@"Date:\s(?'date'\d+\s\w+\s\d+)"
哪个不太严格,但要确保匹配组中要捕获的3个部分存在。
由于其贪婪的性质,使用*
时必须格外小心,否则您会发现正则表达式的匹配程度超出您的预期。