问题描述
我需要识别给定单元格中的所有电子邮件地址,该单元格包含在任何特殊字符中,以任意数量的多行书写。
这是我建造的东西。
"(!\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*)@
说明
--------------------------------------------------------------------------------
( 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
--------------------------------------------------------------------------------
@ '@'