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

问题描述 投票:0回答:1

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

例如,

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

承担全额费用,但仅限全额使用

以上匹配的结果是:

全额 全额

我只想要第一次出现full amount

regex
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.