替换字符串中包含在空格中的单词的第一次出现
Replacing first occurence of a word enclosed in spaces in a string
// SO 上有一些类似的问题,但其中 none 似乎涵盖了替换整个单词(包含在空格中)及其首次出现。同时使用两者是导致我出现问题的原因。
我想替换第一次出现的被空格包围的单词,但我 运行 遇到了一些问题。
我在 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++;
}
}
}
现在的问题是,出于某种原因,match.Success 从来都不是真的,尽管我很确定其中有很多我在其中搜索的值。
// 示例字符串 -
"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 永远不会只用一个制表符分开。它们将始终包含在长字符串中的两个空格中。
问题似乎是您模式中的主要 \b
。有了它,匹配总是失败。
尾随的那个是必不可少的,这样 @val1
也不会错误地匹配 @val10
,但我没有看到前导的是什么,它导致匹配失败。
尝试更改:
string pattern = $@"\b@val{ j + 1 }\b";
到
string pattern = $@"@val{ j + 1 }\b";
除此之外,代码似乎实现了您所描述的内容。
希望对您有所帮助
// SO 上有一些类似的问题,但其中 none 似乎涵盖了替换整个单词(包含在空格中)及其首次出现。同时使用两者是导致我出现问题的原因。
我想替换第一次出现的被空格包围的单词,但我 运行 遇到了一些问题。
我在 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++;
}
}
}
现在的问题是,出于某种原因,match.Success 从来都不是真的,尽管我很确定其中有很多我在其中搜索的值。
// 示例字符串 -
"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 永远不会只用一个制表符分开。它们将始终包含在长字符串中的两个空格中。
问题似乎是您模式中的主要 \b
。有了它,匹配总是失败。
尾随的那个是必不可少的,这样 @val1
也不会错误地匹配 @val10
,但我没有看到前导的是什么,它导致匹配失败。
尝试更改:
string pattern = $@"\b@val{ j + 1 }\b";
到
string pattern = $@"@val{ j + 1 }\b";
除此之外,代码似乎实现了您所描述的内容。
希望对您有所帮助