替换字符串中空格中包含的单词的第一次出现

问题描述 投票:0回答:1

//在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++;
        }
    }
}

现在的问题是,由于某种原因,匹配。即使我很确定有很多值,比如我在其中搜索的值,因此成功永远不会成立。

//示例字符串 -

“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”

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

c# regex string vsto
1个回答
2
投票

这个问题似乎是你模式中领先的\b。有了这个,比赛总是失败。

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

尝试改变:

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

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

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

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.