替换<;usernameredacted@example.com>;带有一个空字符串

本文关键字:有一个 字符串 com lt usernameredacted@example 替换 gt | 更新日期: 2023-09-27 18:00:39

我有这个字符串

     AnyText: "jonathon" <usernameredacted@example.com>

使用Regex 的期望输出

     AnyText: <usernameredacted@example.com>

忽略中间的任何内容!

我在正则表达式方面还是个新手。有人能帮我匹配吗;替换上述场景的表达式?

替换<;usernameredacted@example.com>;带有一个空字符串

试试这个:

string input = "jonathon <usernameredacted@example.com>";
string output = Regex.Match(input, @"<[^>]+>").Groups[0].Value;
Console.WriteLine(output); //<usernameredacted@example.com>

您可以使用以下regex来匹配所有要替换为空字符串的字符:

^[^<]*

第一个^是字符串开头的锚点。字符类中的^表示该字符类为否定。即,任何不是<的字符都将匹配。*是一个贪婪的量词。总之,这个正则表达式将吞噬从字符串开头到第一个<的所有字符。

以下是VBA风格的方法:将"^[^"]*"替换为"。

  • ^标记句子的开头
  • [^"]*标记除引号

更新:由于你在附加评论中提到你想获取"发件人:"和电子邮件地址,但在此期间或之后没有垃圾,我认为与其替换,不如提取。这里有一个为Excel编写的VBA函数,它将返回所有子组匹配项(括号中的所有内容),而不返回其他内容。

Function RegexExtract(ByVal text As String, _
                      ByVal extract_what As String) As String
Application.ScreenUpdating = False
Dim i As Long
Dim result As String
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = extract_what
RE.Global = True
Set allMatches = RE.Execute(text)
For i = 0 To allMatches.Item(0).submatches.count - 1
    result = result & allMatches.Item(0).submatches.Item(i)
Next
RegexExtract = result
Application.ScreenUpdating = True
End Function

使用此代码,您的regex调用将是:"^(.+:).+(<.+>).*"

  • ^表示句子的开头
  • (.+:)表示第一个匹配组..+是一个或多个字符,后跟:和空格
  • .+表示一个或多个字符
  • (<.+>)表示第二匹配组。<是<,那么。+对于一个或多个字符,则最后一个>
  • .*表示零或更多

    字符。

所以在excel中你会使用(假设单元格是A1):

=RegexExtract(A1, "^(.+: ).+(<.+>).*")
相关文章: