正则表达式从末尾匹配

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:13:09

start123start123

开始123结束开始345结束

开始567endstart789end

我需要提取上面字符串的所有开始和结束之间的多组数据(粗体(。

我的代码:

Regex re = new Regex(start(.*)end, RegexOptions.Singleline);
foreach (Match m in re.Matches(text)) dosomething();

唯一提取的文本将是789

问题是,我不知道需要提取的起始和结束格式文本的确切数量。我希望我的正则表达式能够忽略开始的前两个开始,但贪婪正则表达式忽略所有开始,直到最后一个。

它与第一个结束文本匹配后可以停止吗?

如果没有,是否有从后面匹配文本的选项?

更新:

实际上,我的原始代码使用的是非贪婪正则表达式。

提取的文本将是123start123''r''nstart123345567789

换行参数RegexOptions.Singleline在我的实际情况下是必要的,我在这里简化了这个例子,让每个人都能轻松理解

更新2:

我的预期输出是123345567789

正则表达式从末尾匹配

*贪婪运算符。因此,.*将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。要获得非贪婪匹配,请使用*?

start(.*?)end

编辑

如果我正确理解您的问题,您可以使用消极展望。(说明(

String s = @"start123start123
start123endstart345end
start567endstart789end";
Regex re = new Regex(@"(?s)start((?:(?!start).)*)end");
foreach (Match m in re.Matches(s))
         Console.WriteLine(m.Groups[1].Value);

输出

123
345
567
789

如果只需要获取开始和结束之间的数字,则不包括单词start&课程结束:

Regex reg = new Regex(@"(?<=start)[0-9]*(?=end)");
string test = "start123endstart345end";
var resultings = reg.Matches(test);

它将在您显示的字符串中得到{1,2,3}{3,4,5}{5,6,7}{7,8,9}:

start123endstart345end
start567endstart789end

C#代码,只获取起始字符串和结束字符串之间的数字,

{
String input = @"start123start123
start123endstart345end
start567endstart789end";
Regex rgx = new Regex(@"(?<=start)'d+(?=end)");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Value);
}

演示

IDEONE

解释:

  • (?<=start)'d+Lookbacking用于查找与模式匹配的特定字符串。在我们的例子中,它只关注字符串start
  • 'd+(?=end)匹配应该跟在字符串end后面的一个或多个数字