[英]Regular expressions. Match specific word between two words
我使用C#。 我有一个字符串:
wordA wordB wordC wordB wordD
我需要匹配wordA和wordD之间所有出现的wordB。 我使用lookahead和lookbehind来匹配wordA和worD之间的所有内容,如下所示:
(?<=wordA)(.*?)(?=wordD)
但是类似
(?<=wordA)(wordB)(?=wordD)
什么都不匹配。 匹配单词A和单词D之间所有出现的单词B的最佳方法是什么?
放.*?
环顾四周:
(?<=wordA.*?)wordB(?=.*?wordD)
现在,该模式表示:
(?<=wordA.*?)
-(正向后看)要求紧接之前出现wordA
后接任意0+个字符(尽可能少)。 wordB
-字B (?=.*?wordD)
-(正向超前)要求存在任何0+个字符(尽可能少),后跟一个wordD
(因此,它可以wordB
之后或某些字符之后)。 如果需要考虑多行输入,请使用RegexOptions.Singleline
标志编译regex,以便.
可以匹配换行符(或在模式前加上(?s)
内联修饰符选项- (?s)(?<=wordA.*?)wordB(?=.*?wordD)
)。
如果“单词”由字母/数字/下划线组成,并且您需要将它们作为整个单词进行匹配,请不要忘记用\\b
s(单词边界)将wordA
, wordB
和wordD
换行。
始终在目标环境中测试您的正则表达式:
var s = "wordA wordB wordC wordB \n wordD";
var pattern = @"(?<=wordA.*?)wordB(?=.*?wordD)";
var result = Regex.Replace(s, pattern, "<<<$&>>>", RegexOptions.Singleline);
Console.WriteLine(result);
// => wordA <<<wordB>>> wordC <<<wordB>>>
// wordD
参见C#演示 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.