如何使用regex替换匹配项,仅当它前面没有给定字符时
本文关键字:前面 字符 替换 regex 何使用 | 更新日期: 2023-09-27 17:53:49
我有一个foreach语句,它在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字符串之前的任何空格。因此,如果这一行读到"This is a test123.",并且"test123"被替换,我最终得到这样的结果:
"This is valueoftheshorthand ."
为什么空格被删除?
再次更新
我把正则表达式改成了我的(?<!_)
,它保留了空格。
你的正则表达式是正确的。问题是Regex。Replace返回一个新字符串。
您正在忽略返回的字符串。
您的正则表达式看起来是正确的,如果您修复了代码以实际保存字符串(提示@jameskyburz),那么您仍然应该确保将shorthandValue
视为文字。使用Regex.Escape
:
var pattern = String.Format(@"(?<!_){0}", Regex.Escape(shorthandValue))