我有一个 foreach 语句,它正在搜索 a 中的字符串值List<string>
。如果正在读取的当前行包含字符串,我想替换它,但有一些警告。
foreach (string shorthandValue in shorthandFound)
{
if (currentLine.Contains(shorthandValue))
{
// This method creates the new string that will replace the old one.
string replaceText = CreateReplaceString(shorthandValue);
string pattern = @"(?<!_)" + shorthandValue;
Regex.Replace(currentLine, pattern, replaceText);
// currentline is the line being read by the StreamReader.
}
}
shorthandValue
如果前面有下划线字符 ( "_"
) ,我试图让系统忽略该字符串。否则,我希望它被替换(即使它位于行首)。
我做错了什么?
更新
这大部分工作正常:
Regex.Replace(currentFile, "[^_]" + Regex.Escape(shorthandValue), replaceText);
但是,虽然它确实忽略了下划线,但它会删除 shorthandValue 字符串之前的任何空格。因此,如果行读取“这是一个 test123。”,并且“test123”被替换,我最终得到这个结果:
“这是一个快捷方式的价值。”
为什么要删除空间?
再次更新
我将正则表达式改回我的(?<!_)
,它保留了空格。