我正在开发一个正则表达式,它匹配一个单词的所有实例,除了包含该单词的特定字符串。
例如,除了 stack
<之外,我想在以下句子中匹配 stack.overflow
的所有实例/ em> (因为后跟 .overflow
)并替换 stack
STACK
这是堆栈溢出的一堆页面。有时也提到 as stack.overflow.com
执行替换操作后,上面的句子应如下所示:
这是STACK溢出页面的堆栈。有时也提到 as stack.overflow.com
修改:
为了澄清一些混淆,我希望将所有包含stack
的字符串全部用小写字母匹配,除了stack
后跟.overflow
的特定情况。例如,以下句子
我堆叠了这个堆叠堆叠并重新堆叠(再次强制它)但没有 stack.overflow但stacked.overflow和restacked.overflow
应该是
我堆叠了这个堆叠堆栈并重新堆叠(再次强制它)但没有 stack.overflow但是STACKed.overflow和reSTACKed.overflow
答案 0 :(得分:3)
使用否定前瞻。
\bstack(?!\.overflow)
要使其不区分大小写,请使用RegexOptions.IgnoreCase
标记。
带有Regex.Replace
的C#示例代码,其中标记被内联(?i)
选项替换:
var res = Regex.Replace(input, @"(?i)\bstack(?!\.overflow)", "STACK");
证明:
答案 1 :(得分:1)
public double[] ReturnDoubleVariables()
{
double[] ret = new double[5];
ret[0] = promptUserForInput("1st Varaible", );
ret[1] = promptUserForInput("2nd Varaible", );
ret[2] = promptUserForInput("3rd Varaible", );
ret[3] = promptUserForInput("4th Varaible", );
ret[4] = promptUserForInput("5th Varaible", )
return ret;
}
这对我有用。 (不包括匹配后跟“.overflow”。)
答案 2 :(得分:0)
非常简单:使用外观! 它们匹配一个词的开头和结尾。
{
"data": {
"id": 26673876577868,
"created_at": "2015-02-11T04:41:11.894Z",
"modified_at": "2015-02-16T06:40:27.611Z",
"name": "11g DB Stup",
"notes": "",
"completed": true,
"assignee_status": "inbox",
"completed_at": "2015-02-14T05:57:20.530Z",
"due_on": "2015-02-14",
"due_at": null,
"workspace": {
"id": 14810798216415,
"name": "crescentbahuman.com"
},
"num_hearts": 0,
"parent": null,
"hearts": [],
"assignee": null,
"tags": [],
"hearted": false,
"followers": [
{
"id": 14810783571926,
"name": "Asana Admin"
}
],
"projects": [
{
"id": 27017295312687,
"name": "B1 11g - KPIs Implmntn"
}
],
"memberships": [
{
"project": {
"id": 27017295312687,
"name": "B1 11g - KPIs Implmntn"
},
"section": null
}
]
}
}
我无法为您提供整个演示文稿的演示,因为Javascript不支持lookbehinds,但请参阅here。然后,您可以获得匹配,并将其替换为(?<=\s|^)stack(?=\s|\.$)
。
<强>解释强>
toUpper
在单词之前查找字符串的空格或字符串。
(?<=\s|^)
在单词后面查找空格或点以及字符串的结尾。