首页 > 解决方案 > 正则表达式:如果 KeyWord2 在同一个字符串中,则选择 KeyWord1

问题描述

我正在尝试根据字符串中是否存在 KeyWord2 来捕获 .NET 正则表达式引擎中KEYWORD1 到目前为止,我正在使用的积极的环顾解决方案:

(?=.*KeyWord2)**KEYWORD1** (\m\i)

正则表达式测试链接

仅当KeyWord2位于字符串中 KEYWORD1后面的任何位置时才捕获KEYWORD1。如何在正则表达式中优化它,以便它捕获字符串中KEYWORD1的所有实例,尽管 KeyWord2 的位置在前面、后面或两者兼而有之?

我真的很感激一些见解。

谢谢你

标签: regexpositive-lookahead

解决方案


您可以使用下面的正则表达式来满足您的要求:

\bKEYWORD1\b(?:(?<=\bKeyWord2\b.*?)|(?=.*?\bKeyWord2\b))

上述正则表达式的解释:

gi - 使用标志(为了避免任何大小写差异)表示:g - 全局;i - 不区分大小写

\b - 表示单词边界。

(?:) - 表示非捕获组。

(?=.*?KeyWord2) - 表示与从左到右读取KeyWord2之前的所有KEYWORD1匹配的正向前瞻。

| - 代表交替;那就是它在第一个第二个交替组之间交替。(虽然,你可以将它们包装成组。)

(?<=KeyWord2.*?) - 表示无限(因为使用了非固定宽度的惰性标识符.*?正向向后查找,它匹配KeyWord2后面的所有KEYWORD1

你可以在这里找到上面的正则表达式演示

注意- 作为记录,这些引擎支持无限后视

据我所知,他们是唯一的。


推荐阅读