regex - 正则表达式:如果 KeyWord2 在同一个字符串中,则选择 KeyWord1
问题描述
我正在尝试根据字符串中是否存在 KeyWord2 来捕获 .NET 正则表达式引擎中的KEYWORD1 。到目前为止,我正在使用的积极的环顾解决方案:
(?=.*KeyWord2)**KEYWORD1** (\m\i)
仅当KeyWord2位于字符串中 KEYWORD1后面的任何位置时才捕获KEYWORD1。如何在正则表达式中优化它,以便它捕获字符串中KEYWORD1的所有实例,尽管 KeyWord2 的位置在前面、后面或两者兼而有之?
我真的很感激一些见解。
谢谢你
解决方案
您可以使用下面的正则表达式来满足您的要求:
\bKEYWORD1\b(?:(?<=\bKeyWord2\b.*?)|(?=.*?\bKeyWord2\b))
上述正则表达式的解释:
gi - 使用标志(为了避免任何大小写差异)表示:g - 全局;i - 不区分大小写
\b - 表示单词边界。
(?:) - 表示非捕获组。
(?=.*?KeyWord2) - 表示与从左到右读取KeyWord2之前的所有KEYWORD1匹配的正向前瞻。
| - 代表交替;那就是它在第一个和第二个交替组之间交替。(虽然,你可以将它们包装成组。)
(?<=KeyWord2.*?) - 表示无限(因为使用了非固定宽度的惰性标识符
.*?
)正向向后查找,它匹配KeyWord2后面的所有KEYWORD1。
你可以在这里找到上面的正则表达式演示。
注意- 作为记录,这些引擎支持无限后视:
.NET(C#、VB.NET 等)
Matthew Barnett 的Python 正则表达式模块
JGSoft(EditPad 等;在编程语言中不可用)。
据我所知,他们是唯一的。
推荐阅读
- php - 获取 WooCommerce 结帐 URL 动态
- sonarqube - 将 Jacoco 代码覆盖率发布到声纳的命令
- java - 如何测试具有多个返回的函数?
- r - 运行 AMMI 模型时 R 中的 Agricolae 包出错:“model.frame.default 中的错误:可变长度不同
- facebook - 添加 facebook manychat 小部件会影响 Pagepeed 洞察分数
- powershell - Azure powershell Void Newtonsoft.Json.Serialization
- c# - 3 级饼图深入分析 Highcharts
- python - 用户单击按钮时如何显示新窗口?
- rxjs - 'of' 和 'publishReplay' 不发出值
- java - 在开始时管理 JVM OldGen 峰值