用于匹配单词的所有实例的正则表达式,除了包含该单词的特定超字符串

时间:2015-04-30 05:22:34

标签: c# regex

我正在开发一个正则表达式,它匹配一个单词的所有实例,除了包含该单词的特定字符串。

例如,除了 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

3 个答案:

答案 0 :(得分:3)

使用否定前瞻。

\bstack(?!\.overflow)

要使其不区分大小写,请使用RegexOptions.IgnoreCase标记。

带有Regex.Replace的C#示例代码,其中标记被内联(?i)选项替换:

var res = Regex.Replace(input, @"(?i)\bstack(?!\.overflow)", "STACK");

证明:

enter image description here

答案 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|^)在单词后面查找空格或点以及字符串的结尾。