2017-09-26 78 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_])