替换字符串

时间:2018-02-20 16:12:13

标签: c# regex string vsto

//在SO上有一些类似的问题,但它们似乎都不包括替换整个单词(用空格括起来)和它的第一次出现。同时使用两者是导致我出现问题的原因。

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

我在range.Text中有一个包含长字符串的字符串。我想要找到类似的词语" @ 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++;
        }
    }
}

现在的问题是,由于某种原因,匹配。即使我非常确定有很多像我在其中搜索的值那样的成功,也不会成为现实。

//示例字符串 -

  

&#34; 1 \吨@ VAL1 \ R2 \吨@ val2的\ R3 \吨@ VAL3 \ R4 \吨@ VAL4 \ R5 \吨@ val5 \ R6 \吨@ VAL6 \ R7 \吨@ val7 \ R8 \吨@的Val8 \ R9 \吨@ val9 \ R10 \吨@ val10 \ R11 \吨@ VAl11难\ R12 \吨@ val12 \ R13 \吨@ val13 \ R14 \吨@ val14 \ R15 \吨@ val15 \ r \ R& #34;

\ t s和\ r \ n我希望被忽略,但空格对我来说很重要。否则,当循环位于@ val11或@ val10时,我将更换@ val110。两个val永远不会只用一个标签分开。它们将始终用长字符串中的两个空格括起来。

1 个答案:

答案 0 :(得分:2)

问题似乎是您模式中的主要\b。有了这个,比赛总是失败。

尾随的一个是必不可少的,因此@val1也不会错误地匹配@val10,但我没有看到前导的是什么,并且导致匹配失败。

尝试更改:

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

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

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

希望这有帮助