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

C# 正则表达式-提取具有特定模式的子字符串,c#,.net,regex,C#,.net,Regex,我有一个大字符串,如下所示: 99/34 12/34这段文字是22.67 22/23 33/34第二段文字是这样的 22.67 55/66 45/54第三个文本类似于32.27 等等。我试图形成一个正则表达式,从大字符串中提取所有以“两位数,斜杠,两位数,一个空格,两位数,斜杠,两位数,任意字符,任意重复次数,一个.文字和两位数”开头的子字符串 我尝试的正则表达式是\d{2}/\d{2}\s{1}.\.\d{2}。但是,这将返回单个字符串“99/34 12/34此文本为22.67 22/23 3

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

99/34 12/34这段文字是22.67 22/23 33/34第二段文字是这样的 22.67 55/66 45/54第三个文本类似于32.27

等等。我试图形成一个正则表达式,从大字符串中提取所有以“两位数,斜杠,两位数,一个空格,两位数,斜杠,两位数,任意字符,任意重复次数,一个.文字和两位数”开头的子字符串

我尝试的正则表达式是
\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)

问题在于贪婪的
*
它将尝试匹配尽可能多的字符,同时仍然提供匹配

您可以这样简单地修改您的正则表达式

 \d{2}/\d{2}\s.*?\d{2}\.\d{2}
*
后面的
使其不贪婪,只消耗(eat)尽可能少的字符以找到匹配项


请注意,我还将
\s{1}
更改为
\s
,因为它是一个以限定字符开头的单个字符,因为正是一个字符只会混淆模式。

问题在于贪婪的
*
它将尝试匹配尽可能多的字符,同时仍然提供匹配

您可以这样简单地修改您的正则表达式

 \d{2}/\d{2}\s.*?\d{2}\.\d{2}
*
后面的
使其不贪婪,只消耗(eat)尽可能少的字符以找到匹配项

请注意,我还将
\s{1}
更改为
\s
,因为它是一个以限定字符开头的单个字符,因为一个字符只会混淆模式。

阅读关于懒惰(或非贪婪,或不情愿)和贪婪量词的内容。阅读关于懒惰(或非贪婪,或不情愿)和贪婪量词的内容。