如何找到角色并向前和向后看?

时间:2018-07-19 17:46:15

标签: regex notepad++

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

Application

如何匹配电子邮件中的@符号,然后回头查找打开的尖括号,然后向前查找关闭的尖括号?我正在使用Notepad ++将电子邮件地址替换为字符串,例如“ XXX”。

4 个答案:

答案 0 :(得分:1)

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

<[^>]*>

它与左括号匹配并与字符匹配,直到找到右括号为止,然后也与之匹配。

如果您想从比赛中排除方括号,可以使用以下方法:

(?<=<)[^>]*(?=>)

答案 1 :(得分:1)

对于给定的示例,您可以使用正数lookbehind和正向查找来断言左侧和右侧的内容是<>

要匹配电子邮件部分,请使用否定的character class而不是左括号[^<]+,匹配@,然后使用否定字符类而不是右括号{{ 1}}

(?<=<)[^<]+@[^>]+(?=>)

要匹配包括左,右括号和分号,可以使用:

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

答案 2 :(得分:1)

一种非常快速而精确的解决方法是:

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

请参见live demo here

故障:

  • <匹配打开角括号
  • [^@\s<>]+匹配除@,空格,><之外的所有内容
  • @匹配@
  • [^@\s<>]+重复与上述相同的字符类
  • >;匹配;后面的闭合角括号

答案 3 :(得分:0)

使用以下正则表达式:

[^<]+@[^>]+

如果您确定名字和姓氏不会包含 @和尖括号,那么上述正则表达式将可以正常工作。节省了因超前和回头而造成的性能开销。