代码之家  ›  专栏  ›  技术社区  ›  user8620003

替换字符串中第一个出现在空格中的单词

  •  0
  • user8620003  · 技术社区  · 7 年前

    //这方面有一些类似的问题,但它们似乎都没有涵盖替换整个单词(用空格括起来)和它的首次出现。同时使用这两者是我遇到问题的原因。

    我想替换第一个出现的被空格包围的单词,我遇到了一些问题。

    我有一根弦在范围内。包含长字符串的文本。我想找到一个类似于“@val1”、“val2”等的单词,并用我的值列表中的值替换它们。我是这样做的:

    while(i < valueCount && range.Text.Contains("@val"))
    {
    
        for (int j = 0; j < valueLimit; j++)
        {
            string pattern = $@"\b@val{ j + 1 }\b";
            Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
            Match match = regex.Match(range.Text);
    
            if (match.Success)
            {
                range.Text = regex.Replace(range.Text, values[j], 1);
                i++;
            }
        }
    }
    

    现在的问题是,出于某种原因匹配。成功从来都不是真的,尽管我很确定其中有很多我所追求的价值。

    //示例字符串-

    "1\t@val1\r2级\t@val2\r3级\t@val3\r4级\t@val4\r5级\t@val5\r6级\t@val6\r7级\t@val7\r8级\t@val8\r9级\t@val9\r10\t@val10\r11\t@val11\r12\t@val12\r13\t@val13\r14\t@val14\r15\t@val15\r\r“

    我希望被忽略的\t和\r,但空格对我来说很重要。否则,当循环处于@val11或@val10时,我将替换@val110。两个VAL永远不会仅用一个选项卡分隔。它们将始终包含在长字符串中的两个空格中。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Trevor    7 年前

    这个问题似乎是最主要的 \b 按照你的模式。这样一来,比赛总是会失败。

    后面的一个很重要,以便 @val1 也不正确匹配 @val10 ,但我看不出领先的是什么,这导致了比赛的失败。

    尝试更改:

    string pattern = $@"\b@val{ j + 1 }\b";
    

    string pattern = $@"@val{ j + 1 }\b";
    

    除此之外,代码似乎实现了您所描述的内容。

    希望这有帮助