正则表达式从电子邮件

时间:2016-08-18 20:46:08

标签: regex

我正在学习正则表达式,并且无法从电子邮件地址

获取google

字符串

first.name@google.com

我只想获得谷歌,而不是google.com

正则表达式:

[^@].+(?=\.)

结果:https://regex101.com/r/wA5eX5/1

从我的理解。它会忽略@之后找到一个字符串,直到.(点)使用(?=\.)

我做错了什么?

8 个答案:

答案 0 :(得分:9)

[^@]表示“匹配一个 @符号的符号。这不是您要查找的内容 - 使用lookbehind (?<=@) for {{ 1}}和@前瞻(?=\.)在中间提取服务器名称:

\.

中间部分(?<=@)[^.]+(?=\.) 表示“一个或多个非点字符”。

Demo.

答案 1 :(得分:5)

更新回答:使用capturing group保持简单:)

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {}

拆分说明
@(\w+) 捕获组以进行提取(
)代表word character \w
[A-Za-z0-9_]+ {em>一个或多个出现\w

quantifier

答案 2 :(得分:3)

我使用解决方案的正则表达式来完成我的任务,但意识到有些电子邮件并不那么容易:foo@us.industries.comfoobar@tm.valves.netfoo@ge.test.com

对于那些来到这里的人来说也想要子域名(或者被它切断),这里是正则表达式:

(?<=@)[^.]*.[^.]*(?=\.)

答案 3 :(得分:2)

这应该是正则表达式:

(?<=@)[^.]+

(?<=@) - 将搜索放在@之后 [^.]+ - 取所有不是点的字符(在点上停止)

因此,它会从电子邮件地址中提取google

答案 4 :(得分:2)

也许不是严格意义上的&#34;完整的正则表达式答案&#34;但更灵活(如果@之前的部分不是&#34; first.last&#34;)将使用cut:

cut -d @ -f 2 | cut -d . -f 1 

第一次切割将在@之后隔离部件,第二次切割将获得您想要的。 这也适用于其他类型的电子邮件模式:xxxx@server.com / xxx.yyy.zzz @server.com等等......

答案 5 :(得分:0)

这是一个相对简单的正则表达式,它捕获@和最终域扩展名(例如.com,.org)之间的所有内容。它允许包含由非单词字符组成的域名,这些域名存在于现实世界的数据中。

>>> regex = re.compile(r"^.+@(.+)\.[\w]+$")

>>> regex.findall('jane.doe@my-bank.no')
['my-bank']

>>> regex.findall('john.doe@spam.com')
['spam']

>>> regex.findall('jane.ann.doe@sandnes.district.gov')
['sandnes.district']

答案 6 :(得分:0)

当我正在努力获取电子邮件地址的域名时,没有一个与我需要的相对应:

  • 不捕获子域
  • 匹配国家/地区的顶级域名(例如.com.arco.jp

例如,在test@ext.domain.com.mx中,我需要匹配domain.com.mx

所以我做了这个:

[^.@]*?\.\w{2,}$|[^.@]*?\.com?\.\w{2}$

这里是regex101的链接,用于说明正则表达式:https://regex101.com/r/vE8rP9/59

您可以通过添加环视运算符(但在.com中将匹配两次)来获得sumdomain名称(不包含顶级域,例如.com.mxtest@test.com.mx):

[^.@]*?(?=\.\w{2,}$)|[^.@]*?(?=\.com?\.\w{2}$)

答案 7 :(得分:0)

我使用此正则表达式来获取完整的域名'.*@+(.*)',其中.*将忽略@ (by @+)之前的所有字符,并通过提及括号和其中的完整字符串来开始提取cpmlete域名(除了行刹车字符)