//在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永远不会只用一个标签分开。它们将始终用长字符串中的两个空格括起来。
答案 0 :(得分:2)
问题似乎是您模式中的主要\b
。有了这个,比赛总是失败。
尾随的一个是必不可少的,因此@val1
也不会错误地匹配@val10
,但我没有看到前导的是什么,并且导致匹配失败。
尝试更改:
string pattern = $@"\b@val{ j + 1 }\b";
到
string pattern = $@"@val{ j + 1 }\b";
除此之外,代码似乎实现了您所描述的内容。
希望这有帮助