C# 正则表达式-提取具有特定模式的子字符串
我有一个大字符串,如下所示: 99/34 12/34这段文字是22.67 22/23 33/34第二段文字是这样的 22.67 55/66 45/54第三个文本类似于32.27 等等。我试图形成一个正则表达式,从大字符串中提取所有以“两位数,斜杠,两位数,一个空格,两位数,斜杠,两位数,任意字符,任意重复次数,一个.文字和两位数”开头的子字符串 我尝试的正则表达式是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
\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
,因为它是一个以限定字符开头的单个字符,因为一个字符只会混淆模式。阅读关于懒惰(或非贪婪,或不情愿)和贪婪量词的内容。阅读关于懒惰(或非贪婪,或不情愿)和贪婪量词的内容。