我正在研究一个正则表达式,它匹配一个单词的所有实例,除了包含该单词的特定字符串。
例如,我想匹配以下句子中stack
的所有实例,除了stack.overflow
(因为它后面是.overflow
)并用stack
替换STACK
这是堆栈溢出的一堆页面。有时也称为stack.overflow.com
执行替换操作后,上面的句子应如下所示:
这是STACK溢出页面的堆栈。有时也称为stack.overflow.com
编辑:
为了澄清一些混淆,我希望将所有包含stack
的字符串全部匹配,除了stack
后跟.overflow
的特定情况。例如,以下句子
我堆叠了这个堆叠堆栈并重新堆叠(再次stacked)但没有stack.overflow但stack.overflow和restacked.overflow
应该
我堆叠了这个STACKing STACK并重新堆叠(再次强制它)但没有stack.overflow但是STACKed.overflow和reSTACKed.overflow
使用负向前瞻。
\bstack(?!\.overflow)
为了使它不区分大小写使用RegexOptions.IgnoreCase
标志。
带有Regex.Replace
的C#示例代码,其中标志被替换为内联(?i)
选项:
var res = Regex.Replace(input, @"(?i)\bstack(?!\.overflow)", "STACK");
证明:
System.Text.RegularExpressions.Regex.Replace("This is a stack of pages on stack overflow. Sometimes also referred to as stack.overflow.com"
,"stack(?!\.overflow)"
,"STACK")
这适合我。 (不包括匹配后跟“.overflow”。)
很简单:使用外观!它们匹配单词的开头和结尾。
(?<=\s|^)stack(?=\s|\.$)
我不能给你一个整体的演示,因为Javascript不支持lookbehinds,但请参阅here。然后你可以得到你的匹配,并用toUpper
替换它。
说明
qazxsw poop在单词之前查找空格或字符串的开头。
(?<=\s|^)
在单词后面查找空格或点以及字符串的结尾。