c# - C# 正则表达式在字符串匹配后查找并删除文本
问题描述
我想在文本中匹配字符串之后查找并删除所有内容并将其替换为文本,我是正则表达式的新手
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, "");
如何使用相同的正则表达式仅查找“发件人:”并将其后的所有内容(但在同一行)替换为发件人:“已编辑”。
解决方案
您可以使用
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]*"
。
推荐阅读
- php - 使用 HTML2PDF 创建 A4 PDF 时出现 css top 属性问题
- java - 无法将战争文件部署到 Weblogic 12c 服务器上的特定文件夹
- c# - 如何在没有列名的情况下序列化 sql 数据?
- gradle - Gradle 子项目依赖项无法由需要它的项目解决
- javascript - (JavaScript & HTML )将项目从一个列表移动到另一个列表
- azure-active-directory - 如何重置 API 权限 Microsoft Graph
- r - 如何重复加入 r 中的表?
- ios - Mapbox 中没有语音命令逐个转弯方向视图
- arrays - 如何过滤再次包含 JSON 对象数组的 JSON 对象数组?
- javascript - 创建 DOM 元素时返回的承诺中的 HTTP GET 错误