[英]C# regex find and remove text after a string matched
我想在文本中匹配的字符串之后查找并删除所有内容并将其替换为文本,我是正则表达式的新手
From: Tom novy <AJames@onmicrosoft.com>
To: "mithrandir@wttom.onmicrosoft.com"
From: David Cusack <AJames@onmicrosoft.com>
应该:
From: "redacted"
To: "mithrandir@wttom.onmicrosoft.com"
From: "redacted"
我有一个在字符后替换的正则表达式:
var regex = new Regex(@":(.*)");
var newText = regex.Replace(testString1, "");
如何使用相同的正则表达式仅查找“From:”并将其后的所有内容(但在同一行)替换为 From:“redacted”。
您可以使用
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:
捕获到 Group 1 中,并且$1
反向引用在替换时将此值放回结果中。
注意: .
在 .NET 正则表达式中也匹配 CR 符号,因此如果您打算只替换最多 CRLF 结尾,则需要替换.
在带有[^\\r\\n]
的正则表达式中。
另外,如果From:
应该只在一行的开始时相匹配,您需要使用预置它^
锚,并用编译正则表达式RegexOptions.Multiline
修改,或(?m)
在线修正, "(?m)^(From:)[^\\r\\n]*"
。
我很确定我们可能不想要正则表达式,但如果我错了,也许我们会从这些表达式开始,
([a-z]+:)(.*?)([a-z]+:)(.*)
(From:)(.*?)(To:)(.*)
(From:)(.*?)([a-z]+:)(.*)
我们将替换为,
\1 "redacted"\n\3 "redacted"
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"([a-z]+:)(.*?)([a-z]+:)(.*)";
string substitution = @"\1 ""redacted""\n\3 ""redacted""";
string input = @"From: Tom novy <AJames@onmicrosoft.com>
To: ""mithrandir@wttom.onmicrosoft.com""";
RegexOptions options = RegexOptions.Singleline | RegexOptions.IgnoreCase;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
}
}
怎么样
Regex.Replace("From: Tom", @"From\:.*", "From: redacted")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.