正则表达式从电子邮件地址中选择别名

问题描述

我需要识别给定单元格中的所有电子邮件地址,该单元格包含在任何特殊字符中,以任意数量的多行书写。

这是我建造的东西。

"(!\s<,;-)[a-zA-Z0-9]*@"

有什么改进吗?

解决方法

模式 (!\s<,;-)[a-zA-Z0-9]*@ 从字面上捕获 !\s<,;- 开始。如果您想匹配列出的 1 个字符,您可以改用字符类 [!\s<,;-]

如果你想在 xyz123@gmail.com 中匹配 xyz123 你可以使用:

[a-zA-Z0-9]+(?=@)

模式匹配

  • [a-zA-Z0-9]+ 匹配 1+ 次出现的任何列出的范围
  • (?=@) 直接在当前位置的右侧断言(不匹配)一个 @

查看正则表达式 demo

,

使用

([a-zA-Z0-9]\w*)@

regex proof

说明

--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [a-zA-Z0-9]              any character of: 'a' to 'z','A' to
                             'Z','0' to '9'
--------------------------------------------------------------------------------
    \w*                      word characters (a-z,A-Z,0-9,_) (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  @                        '@'