替换<;usernameredacted@example.com>;带有一个空字符串
本文关键字:有一个 字符串 com lt usernameredacted@example 替换 gt | 更新日期: 2023-09-27 18:00:39
我有这个字符串
AnyText: "jonathon" <usernameredacted@example.com>
使用Regex 的期望输出
AnyText: <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, "^(.+: ).+(<.+>).*")