Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#regex在匹配字符串后查找并删除文本_C#_Regex_String_Text - Fatal编程技术网

C#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.

我想找到并删除文本中匹配字符串后的所有内容,并用文本替换它,我对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
    -单词边界
  • ((?:From | To):
    -捕获组1:从
    ,然后
  • *
    -尽可能多的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"