C#regex在匹配字符串后查找并删除文本
我想找到并删除文本中匹配字符串后的所有内容,并用文本替换它,我对regex是新手C#regex在匹配字符串后查找并删除文本,c#,regex,string,text,C#,Regex,String,Text,我想找到并删除文本中匹配字符串后的所有内容,并用文本替换它,我对regex是新手 From: Tom novy <AJames@onmicrosoft.com> To: "mithrandir@wttom.onmicrosoft.com" From: David Cusack <AJames@onmicrosoft.com> 我有一个正则表达式,它在字符后替换: var regex = new Regex(@":(.*)"); var newText = regex.
From: Tom novy <AJames@onmicrosoft.com>
To: "mithrandir@wttom.onmicrosoft.com"
From: David Cusack <AJames@onmicrosoft.com>
我有一个正则表达式,它在字符后替换:
var regex = new Regex(@":(.*)");
var newText = regex.Replace(testString1, "");
如何让同一个正则表达式只查找“From:”并将其后面的所有内容(但在同一行)替换为From:“编辑” 我很确定这里可能不需要正则表达式,但如果我错了,也许我们可以从这些表达式开始
([a-z]+:)(.*?)([a-z]+:)(.*)
(From:)(.*?)(To:)(.*)
(From:)(.*?)([a-z]+:)(.*)
我们将用
\1 "redacted"\n\3 "redacted"
试验
使用系统;
使用System.Text.RegularExpressions;
公开课范例
{
公共静态void Main()
{
字符串模式=@“([a-z]+:)(.*)([a-z]+:)(.*)”;
字符串替换=@“\1”已编辑“\n\3”已编辑“;
字符串输入=@“发件人:Tom novy
致:“”mithrandir@wttom.onmicrosoft.com""";
RegexOptions options=RegexOptions.Singleline | RegexOptions.IgnoreCase;
正则表达式正则表达式=新正则表达式(模式、选项);
字符串结果=regex.Replace(输入,替换);
}
}
怎么样
Regex.Replace("From: Tom", @"From\:.*", "From: redacted")
你可以用
Regex.Replace(s, "(From:).*", "$1 \"redacted\"")
或者,与To:
结合使用
Regex.Replace(s, @"\b((?:From|To):).*", "$1 \"redacted\"")
这里,
-单词边界\b
-捕获组1:从((?:From | To):
或
到
,然后
:
-尽可能多的0个或更多字符(换行字符除外)*
(From:).*
匹配并将From:
捕获到组1中,$1
反向引用在替换时将此值放回结果中
注意:.NET正则表达式中的
也与CR符号匹配,因此如果您计划最多替换一个CRLF结尾,则需要将正则表达式中的
替换为[^\r\n]
另外,如果只在行首匹配
From:
,则需要使用^
锚点将其前置,并使用RegexOptions编译正则表达式。多行修饰符,或(?m)
内联修饰符,“(?m)^(From:)[^\r\n]*”
文本中有:
,为什么要使用代码>在正则表达式中?如何获取这些字符串?这是可预测的吗?正则表达式对我来说似乎有些过分。@BrootsWaymb字符串可能不同,您不需要与:,它已经是一个已知的字符串。我的两个建议都能满足你的需要。请参阅更新版和如何查找:?为什么要转义冒号?我在几乎所有非字母数字字符前面都放了转义符。在怀疑的时候给你信心:)你几乎不需要在正则表达式模式中逃逸冒号。你永远不需要在.NET正则表达式中逃避它。好吧,我不知道所有的特殊字符。我相信,每个人,包括我自己,读到这篇文章的人,都不必问自己这是不是一个特殊的字符。既然逃避它没有问题,我就在不确定的时候做。如果你在JS和HTML5模式中使用它,或者用u
修饰符编译JS RegExp对象时,它会受到伤害。你在C#中不会有问题,没错。很酷,和其他选项一样,我想知道在表达式中是否可以将From:和to:组合在一起,因此它发现From:和to:…这是一个完美的例子,详细解释了一切,应该可以帮助其他具有类似模式的人
Regex.Replace(s, "(From:).*", "$1 \"redacted\"")
Regex.Replace(s, @"\b((?:From|To):).*", "$1 \"redacted\"")
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"