使用空字符串</usernameredacted@example.com>替换<usernameredacted@example.com>之前的任何字符

时间:2011-06-30 02:46:44

标签: c# regex

我有这个字符串

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

使用Regex的所需输出

     AnyText: <usernameredacted@example.com>

忽略介于两者之间的任何东西!

我仍然是正则表达的新手。任何人都可以帮助我匹配&amp;替换上述场景的表达式?

3 个答案:

答案 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风格中执行此操作的方法:将“^ [^”“] *”替换为“。”

  • ^标志着句子的开头。
  • [^“”] *标记除a之外的任何内容 引号。

更新: 因为在你的附加评论中你提到你想要获取“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;)。*”

  • ^表示句子的开头
  • (。+:)表示第一个匹配组。 。+是一个或多个字符,后跟:和空格
  • 。+表示一个或多个字符
  • (&lt;。+&gt;)表示第二个匹配组。 &LT;是&lt;,然后。+表示一个或多个字符,然后是最终的&gt;
  • 。*表示零或更多

    字符。

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

=RegexExtract(A1, "^(.+: ).+(<.+>).*")