如何使正则表达式(跳过一些文本以匹配特定单词)仅匹配一次



我有一个正则表达式,可以跳过一些单词来匹配特定单词。我希望它只匹配该特定单词的第一次出现。

例如

我有一个正则表达式(full)(s+S+){0,10}?s+(amount)我的示例文本是

对全额负责,但只能获得全额

上述匹配的结果是:


全额 全额

我只想要第一次出现full amount

使用该部分跳过一些单词,您可以使用和锚定^来断言字符串的开头并使用.*?匹配任何字符 0+ 次非贪婪

然后使用 2 个捕获组,其中中间的部分可以变成非捕获组:

^.*?b(full)(?:s+S+){0,10}?s+(amount)b

正则表达式演示 |C# 演示

例如:

String str = @"liable for full amount but only in access of the full amount";
Match m = Regex.Match(str, @"^.*?(full)(?:s+S+){0,10}?s+(amount)");      
Console.WriteLine("{0} {1}", m.Groups[1].Value, m.Groups[2].Value); 

结果:

full amount

最新更新