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

时间:2019-04-17 18:05:35

标签: regex

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

例如,

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

  

对全部金额负责,但仅对全部金额负责

以上匹配结果为:

  

全额
  全额

我只想要full amount

的第一次出现

1 个答案:

答案 0 :(得分:0)

使用该部分跳过一些单词,您可以使用和锚定^来声明字符串的开头,并使用.*?将所有char 0+次非贪婪匹配

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

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

Regex demo | C# demo

例如:

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