Вы можете использовать
Regex.Replace(s, "(From:).*", "$1 \"redacted\"")
Или, в сочетании с To:
,
Regex.Replace(s, @"\b((?:From|To):).*", "$1 \"redacted\"")
Здесь,
\b
- граница слова
((?:From|To):)
- Группа захвата 1: либо From
, либо To
, затем :
.*
- любые 0 или более символов, кроме символов перевода строки, как можно больше.
См. Демоверсию C #
var s = "From: Tom novy <AJames@onmicrosoft.com>\nTo: \"mithrandir@wttom.onmicrosoft.com\"\nFrom: David Cusack <AJames@onmicrosoft.com>";
Console.WriteLine(Regex.Replace(s, "(From:).*", "$1 \"redacted\""));
Выход:
From: "redacted"
To: "mithrandir@wttom.onmicrosoft.com"
From: "redacted"
Обратите внимание, что (From:).*
соответствует и захватывает From:
в группу 1, а обратная ссылка $1
возвращает это значение обратно в результат при замене.
ПРИМЕЧАНИЕ : .
в регулярном выражении .NET также соответствует символу CR, поэтому, если вы планируете заменить только до конца CRLF, вам необходимо заменить .
в регулярном выражении на [^\r\n]
.
Кроме того, если From:
следует сопоставлять только в начале строки , вам необходимо добавить его к якору ^
и скомпилировать регулярное выражение с модификатором RegexOptions.Multiline
или (?m)
встроенный модификатор, "(?m)^(From:)[^\r\n]*"
.