Regex 我如何找到一个角色并向前和向后看?

Regex 我如何找到一个角色并向前和向后看?,regex,notepad++,Regex,Notepad++,我正在尝试使用Notepad++中的正则表达式替换字符串。数据大致如下所示。有些联系人没有姓氏,有些联系人没有名字。所有联系人都用分号(;)分隔,并且都有一个以尖括号结尾的电子邮件地址 LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <fi

我正在尝试使用Notepad++中的正则表达式替换字符串。数据大致如下所示。有些联系人没有姓氏,有些联系人没有名字。所有联系人都用分号(;)分隔,并且都有一个以尖括号结尾的电子邮件地址

LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; FirstName - Unit <first.last@SomeDomain.com>;  FirstName <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>;
LastName,FirstName-单位;姓氏,姓氏-单位;姓氏,姓氏-单位;名字-单位;名字;姓氏,姓氏-单位;姓氏-单位;姓氏,姓氏-单位;
我如何匹配电子邮件中的@符号,然后回首查找开始角括号,然后向前查找结束角括号?我正在使用Notepad++将电子邮件地址替换为字符串,如“XXX”。

您可以使用它捕获所有电子邮件

]*>

它匹配开始括号和字符,直到找到结束括号,然后再匹配

如果要从匹配中排除括号,可以使用以下选项:

您可以使用来捕获所有电子邮件

]*>

它匹配开始括号和字符,直到找到结束括号,然后再匹配

如果要从匹配中排除括号,可以使用以下选项:


对于给定的示例,您可以使用正向和正向前瞻来断言左侧和右侧的内容是

要匹配电子邮件部分,请使用否定以匹配非开头括号
[^]+

要匹配,包括开始括号和结束括号以及分号,可以使用:


对于给定的示例,您可以使用正向和正向前瞻来断言左侧和右侧的内容是

要匹配电子邮件部分,请使用否定以匹配非开头括号
[^]+

要匹配,包括开始括号和结束括号以及分号,可以使用:


使用以下正则表达式:

[^<]+@[^>]+
[^]+

如果您确定名字和姓氏不包含@和尖括号,那么上面的正则表达式就可以了。它节省了lookaheads和lookbehinds造成的性能开销。

使用以下正则表达式:

[^<]+@[^>]+
[^]+

如果您确定名字和姓氏不包含@和尖括号,那么上面的正则表达式就可以了。它节省了lookaheads和lookbehinds造成的性能开销。

一个非常快速和精确的解决方法是:

<[^@\s<>]+@[^@\s<>]+>;

细分:

  • 以外的任何内容匹配a
    后面的闭合角括号

    • 一个非常快速和精确的解决方法是:

      <[^@\s<>]+@[^@\s<>]+>;
      

      细分:

      • 以外的任何内容匹配a
        后面的闭合角括号

      试试看,我喜欢它,又漂亮又简单。我有一个更复杂的解决方案,匹配开始空格和开始括号的组合以及结束括号。它偶尔会失败,并以比它应该的更多的方式取代它。我喜欢它,漂亮而简单。我有一个更复杂的解决方案,匹配开始空格和开始括号的组合以及结束括号。它偶尔会失败,而且替换的方式比应该的多。如果他们只是想用“xxx”替换电子邮件,那么这似乎是不必要的。尽管如此,如果他们想分别跟踪first.last和domain,这可能会很有用。@emsimpson92获取正确的当前示例数据。但这可能是一个更大的数据集的一部分,它是关于一个电子邮件地址的,所以我的建议是匹配一个
      @
      符号。这是真的。我想可能还有其他字段被
      封装,如果他们只是想用“xxx”替换电子邮件,那么这似乎是不必要的。尽管如此,如果他们想分别跟踪first.last和domain,这可能会很有用。@emsimpson92获取正确的当前示例数据。但这可能是一个更大的数据集的一部分,它是关于一个电子邮件地址的,所以我的建议是匹配一个
      @
      符号。这是真的。我想当我们讨论性能问题时,
      可能会封装其他字段,这需要3287个步骤来匹配<代码>(?)
      需要487,而
      ]*>
      需要32。第四只鸟的解决方案需要791。替换一个字符串中的所有电子邮件需要多长时间?(我已经检查过了,
      [^]+
      速度更快)
      ]*>
      速度最快,但它与尖括号匹配。我将
      [^]+
      与不匹配方括号的正则表达式进行比较<代码>(?)
      需要487,而
      ]*>
      需要32。第四只鸟的解决方案需要791。替换一个字符串中的所有电子邮件需要多长时间?(我已经检查过了,
      [^]+
      速度更快)
      ]*>
      速度最快,但它与尖括号匹配。我将
      [^]+
      与不匹配括号的正则表达式进行比较。