我有这个字符串
AnyText: "jonathon" <usernameredacted@example.com>
使用Regex的所需输出
AnyText: <usernameredacted@example.com>
忽略介于两者之间的任何东西!
我仍然是正则表达的新手。任何人都可以帮助我匹配&amp;替换上述场景的表达式?
答案 0 :(得分:7)
试试这个:
string input = "jonathon <usernameredacted@example.com>";
string output = Regex.Match(input, @"<[^>]+>").Groups[0].Value;
Console.WriteLine(output); //<usernameredacted@example.com>
答案 1 :(得分:2)
您可以使用以下正则表达式将要替换的所有字符与空字符串匹配:
^[^<]*
第一个^
是字符串开头的锚点。字符类中的^
表示字符类是否定的。即。任何不是<
的字符都会匹配。 *
是一个贪婪的量词。总而言之,这个正则表达式会吞掉从字符串开头到第一个<
的所有字符。
答案 2 :(得分:0)
以下是在VBA风格中执行此操作的方法:将“^ [^”“] *”替换为“。”
更新: 因为在你的附加评论中你提到你想要获取“From:”和电子邮件地址,但是没有任何垃圾在中间或之后,我想而不是替换,提取会更好。这是一个为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
使用此代码,您的正则表达式调用将是:“^(。+:)。+(&lt;。+&gt;)。*”
。*表示零或更多
字符。
所以在Excel中你会使用(假设单元格是A1):
=RegexExtract(A1, "^(.+: ).+(<.+>).*")