正则表达式在字符串中任何特定单词之前和之后查找特定单词

Posted

技术标签:

【中文标题】正则表达式在字符串中任何特定单词之前和之后查找特定单词【英文标题】:regex to find a specific word before and after any specific word in string 【发布时间】:2021-11-21 23:38:19 【问题描述】:

我需要一个正则表达式,它可以在任何其他特定单词(包括搜索词本身)之前和之后为我提供带有特定单词的字符串。

请注意:开始词和结束词不能是同一个词。

示例

string text = "strat text click my URL MyUrl.com click me end text completed"; 

正则表达式应该给我一个包含起始词的字符串 click 和结束词是 end 和搜索词是 MyUrl.com

在这里,在这种情况下,上述字符串的输出将是,

click my URL MyUrl.com click me end

我尝试使用以下正则表达式,它返回搜索文本前后各有一个单词的文本

(?:\S+\s)?\SMyUrl.com\S(?:\s\S+)? -> 输出是 URL MyUrl.com 点击

我找不到适合我要求的正则表达式。

【问题讨论】:

【参考方案1】:

由于?,这些部分(?:\S+\s)?(?:\s\S+)? 在模式中匹配0 或1 次

如果你想匹配开始和结束模式之间的所有单词,应该有更多的重复,但你不知道中间有多少。

您必须指定开始词和结束词,并将匹配空白字符和非空白字符的部分重复 0 次或更多次以匹配其间的所有单词。

\bclick(?:\s+\S+)*? \S*MyUrl\.com\S*(?:\s+\S+)*? end\b

Regex demo

【讨论】:

以上是关于正则表达式在字符串中任何特定单词之前和之后查找特定单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:查找特定字符串后的所有数字

XCode Magical Record, MR_findByAttribute - 查找带有特定单词的字符串(正则表达式?)

不包含多个特定单词的字符串的正则表达式

如何否定正则表达式中的特定单词? [复制]

正则表达式用特定格式 C# 替换整个单词

正则表达式 - 匹配任何单词但忽略特定单词[重复]