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

本文关键字:模式 字符串 提取 正则表达式 | 更新日期: 2023-09-27 18:32:45

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

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}

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

请注意,我还将's{1}更改为's,因为它是一个字符,以限定它开头,因为恰好是一个字符,除了混淆模式之外什么都不做。