繁体   English   中英

常用表达。 在两个词之间匹配特定词

[英]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(单词边界)将wordAwordBwordD换行。

始终在目标环境中测试您的正则表达式:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM