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

时间:2017-04-24 11:44:17

标签: c# regex

我使用C#。我有一个字符串:

wordA wordB wordC wordB wordD

我需要匹配wordA和wordD之间出现的所有wordB。 我使用lookahead和lookbehind匹配wordA和worD之间的所有内容,如下所示:

(?<=wordA)(.*?)(?=wordD)

但是像

(?<=wordA)(wordB)(?=wordD) 

什么都不匹配。 在wordA和wordD之间匹配所有出现的wordB的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

.*?放入外观:

(?<=wordA.*?)wordB(?=.*?wordD)

请参阅regex demo

现在,模式意味着:

  • (?<=wordA.*?) - (一个积极的外观)要求wordA后面跟着任何0+字符(尽可能少)... ...
  • wordB - 字B
  • (?=.*?wordD) - (一个积极的向前看)需要存在任何0+字符(尽可能少),然后是wordD之后(因此,它可能在{{1}之后或者在某些字符之后)。

如果您需要考虑多行输入,请使用wordB标记编译正则表达式,以便RegexOptions.Singleline可以匹配换行符号(或者使用.内联修饰符选项添加模式 - { {1}})。

如果“单词”由字母/数字/下划线组成,并且您需要将它们作为整个单词匹配,请不要忘记将(?s)(?s)(?<=wordA.*?)wordB(?=.*?wordD)wordA包括在内wordB s(字边界)。

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

wordD

请参阅C# demo