内の文字列値を検索する 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」を置き換えると、次の結果になります。
「これは VALUEOFTHESHORTHAND です。」
スペースが削除されるのはなぜですか?
再度更新
正規表現を自分の(?<!_)
ものに戻しましたが、スペースが保持されています。