我需要一个正则表达式来捕获最后的电子邮件地址
2017-11-30T17:00:02.596Z,10.1.20.211,RenjuXXX,XXXX,mxa-0003fe01.xx.renjj.com ,; 250 2.0.0 2ej1k6mass-1消息接受发送; ClientSubmitTime :, Outbound to互联网,SMTP,发送,asadasdasd1212,,b4b8c0b5-ce3b-4aca-8335-08d53813c96a,Jose.renj @ renj.org,250 2.1.5收件人好,41758,1 ,,, RE:我的简历,renjujacob @ renju.com ,renjujacob @ renju.com,
我尝试使用下面的这个正则表达式捕获电子邮件ID,但它捕获了第一个email
?((P(小于?=,)[α-ZA-Z0-9- ] + @ [A-ZA-Z0-9 - ] +(= \ S *(?:\ W + = |))))
需要正则表达式来捕获最后的电子邮件ID(renjujacob@renju.com)。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用否定前瞻:
[^,\s@]++@[^,\s@]++(?![^@]*@)
<小时/> 细分,这说:
[^,\s@]++ # NOT comma nor whitespace nor @, 1+ times, possessive
@ # @ literally
[^,\s@]++ # same as above
(?![^@]*@) # a neg. lookahead, making sure there's no @ to follow
<小时/>
另一种方法是通过获取所有电子邮件地址
[^,\s@]++@[^,\s@]++
并选择编程语言中的最后一项(例如results[-1]
中的Python
)。
感谢@Andrei改善模式。
答案 1 :(得分:0)
.*((?<=,)[a-zA-Z0-9-.]+@[a-zA-Z0-9-.]+(?=\s*(?:\w+=|,)))
。*匹配任何字符(行终止符除外)
第一捕获组((?&lt; =,)[a-zA-Z0-9 - 。] + @ [a-zA-Z0-9 - 。] +(?= \ s *(?:\ w + = |,))):
正面观察(?&lt; =,)
断言下面的正则表达式匹配
,匹配字符,字面意思(区分大小写)
匹配下面列表中的单个字符[a-zA-Z0-9 - 。] +
a-z a(索引97)和z(索引122)之间的单个字符(区分大小写)
A-Z A(索引65)和Z(索引90)范围内的单个字符(区分大小写)
0-9 0(索引48)和9(索引57)范围内的单个字符(区分大小写)
- 匹配列表中的单个字符 - 。 (区分大小写)
@匹配字符@字面(区分大小写)
匹配下面列表中的单个字符[a-zA-Z0-9 - 。] +:
a-z a(索引97)和z(索引122)之间的单个字符(区分大小写)
A-Z A(索引65)和Z(索引90)范围内的单个字符(区分大小写)
0-9 0(索引48)和9(索引57)范围内的单个字符(区分大小写)
- 匹配列表中的单个字符 - 。 (区分大小写) 正向前瞻(?= \ s *(?:\ w + = |,))
断言下面的正则表达式匹配:
\ s *匹配任何空白字符(等于[\ r \ n \ t \ f \ v])
非捕获组(?:\ w + = |,)
全局模式标记 g修饰符:全局。所有比赛(第一场比赛后不返回)
答案 2 :(得分:0)
正则表达式
@
在括号内捕获倒数第二个逗号分隔字段中的电子邮件地址,但没有很多(通常是错误的)关于电子邮件地址可以包含或不包含的假设 - 我们只需要一个import {CapitalizationStyle} from "Utils/CapitalizationStyle";
并排除逗号因为格式是逗号分隔的,但就是它。