【问题标题】:Regex to remove text after angle brackets正则表达式删除尖括号后的文本
【发布时间】:2018-05-13 18:51:21
【问题描述】:

我正在尝试编写一个正则表达式,它将从电子邮件“发件人”标题中提取名称。我有一个适用于大多数电子邮件客户端的正则表达式,但我只是注意到另一个电子邮件客户端发送的标题略有不同,从而破坏了正则表达式。我最初的想法是提取双引号或单引号内的所有内容,但这不再起作用,因为它不必被引用。

我使用正则表达式([""'])(?:(?=(\\?))\2.)*?\1 来提取引号之间的文本。然而,现在我认为最好的做法是删除尖括号内的文本,只留下没有引号的“测试人员”,最好不要在逗号后出现第二次,尽管这不是必需的。

下面是我试图从中提取名称的两个字符串:

Testing Person <testing.person@example.com>,Testing Person <testing.person@example.com>
"Testing Person" <testing.person@example.com>,"Testing Person" <testing.person@example.com>

我尝试使用它,但我似乎无法弄清楚如何告诉它如何只捕获字符串的前半部分直到尖括号(?!([^&lt;|&gt;])).*

【问题讨论】:

  • [^&lt;|&gt;]是什么意思?

标签: regex


【解决方案1】:

您可以使用正向向前看,在

例子:

string pattern = @"([\w]+[\w\s]*)(?=[\'""\s]*<{1})";
var matches = Regex.Matches(
                  "Testing Person <testing.person@example.com>,
                  Testing Person <testing.person@example.com>, 
                  \"Testing Person\" <testing.person@example.com>,
                  'Testing Person' <testing.person@example.com>", 
                  pattern);

解释:

{1} :恰好出现一次

*:零次或多次出现

+:出现一次或多次

\w: 字母数字

\s: 空格

[]:定义范围

[\'""\s]:范围内接受单引号、双引号和空格,\为转义字符

x(?= 之前的 x

x(?=[\'""\s]*

([\w]+[\w\s]*):一个或多个字母数字后跟零个或多个字母数字或空格。我添加了 [\w]+ 以确保我们不匹配空字符串。

您可以在这里查看有关积极展望的解释:http://www.regular-expressions.info/lookaround.html

【讨论】:

    【解决方案2】:

    在我看来,如果可能的话,使用捕获组比使用环视更直接。您可以使用以下模式: (['"]?)([A-Za-z ]+)\1 &lt;.+&gt;

    只需替换为\2

    https://regex101.com/r/ISEEeo/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2020-02-14
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      相关资源
      最近更新 更多