正则表达式 - 提取具有特定模式的子字符串

时间:2016-01-31 00:53:15

标签: c# .net regex

我有一个大字符串,如下所示:

  

99/34 12/34本文是22.67 22/23 33/34第二个文字就像是   22.67 55/66 45/54第三个文字就像是32.27

等等。我试图形成一个正则表达式来提取所有以&#34开头的子串;两个数字,斜杠,两个数字,一个空格,两个数字,斜线,两个数字,任意字符任意数量的重复,一个。字面和两位数"从大字符串。

我试过的正则表达式是\d{2}/\d{2}\s{1}.*\.\d{2}。但是,这将返回单个字符串" 99/34 12/34此文本为22.67 22/23 33/34第二个文本就像是22.67 55/66 45/54第三个文本就像是32.27" 。我希望将其提取为

  

99/34 12/34本文为22.67

     

22/23 33/34第二个文字就像是22.67

     

55/66 45/54第三个文字就像是32.27

我该怎么做?我正在使用C#(.NET 4.5)

1 个答案:

答案 0 :(得分:2)

问题在于贪婪的.*它会尽可能多地匹配同时仍然匹配的字符。

你可以简单地修改你的正则表达式

 \d{2}/\d{2}\s.*?\d{2}\.\d{2}

?之后的*使其不贪婪,只消耗(吃掉)尽可能少的字符才能找到匹配项。

请注意,我还将\s{1}更改为\s,因为它是一个单一的字符,从一个限定条件开始,因为除了混淆模式之外什么都不做。