我正在学习正则表达式,并且无法从电子邮件地址
获取google
字符串
first.name@google.com
我只想获得谷歌,而不是google.com
正则表达式:
[^@].+(?=\.)
结果:https://regex101.com/r/wA5eX5/1
从我的理解。它会忽略@
之后找到一个字符串,直到.
(点)使用(?=\.)
我做错了什么?
答案 0 :(得分:9)
[^@]
表示“匹配一个不 @
符号的符号。这不是您要查找的内容 - 使用lookbehind (?<=@)
for {{ 1}}和@
前瞻(?=\.)
在中间提取服务器名称:
\.
中间部分(?<=@)[^.]+(?=\.)
表示“一个或多个非点字符”。
答案 1 :(得分:5)
更新回答:使用capturing group和保持简单:)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {}
拆分说明
@(\w+)
捕获组以进行提取(
)
代表word character \w
[A-Za-z0-9_]
是+
{em>一个或多个出现\w
答案 2 :(得分:3)
我使用解决方案的正则表达式来完成我的任务,但意识到有些电子邮件并不那么容易:foo@us.industries.com
,foobar@tm.valves.net
和foo@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.ar
或co.jp
)例如,在test@ext.domain.com.mx
中,我需要匹配domain.com.mx
所以我做了这个:
[^.@]*?\.\w{2,}$|[^.@]*?\.com?\.\w{2}$
这里是regex101的链接,用于说明正则表达式:https://regex101.com/r/vE8rP9/59
您可以通过添加环视运算符(但在.com
中将匹配两次)来获得sumdomain名称(不包含顶级域,例如.com.mx
或test@test.com.mx
):>
[^.@]*?(?=\.\w{2,}$)|[^.@]*?(?=\.com?\.\w{2}$)
答案 7 :(得分:0)
我使用此正则表达式来获取完整的域名'.*@+(.*)'
,其中.*
将忽略@ (by @+)
之前的所有字符,并通过提及括号和其中的完整字符串来开始提取cpmlete域名(除了行刹车字符)