给出以下两个字符串:
\06086-afde-4e46-8886-@xxx.com\0xxx7ccd-6293-4343-8e50-xxx
\0name.surname@xxx.com\0xxx6293-4343-8e50-e1d5-xxx
我尝试提取6086-afde-4e46-8886-
(id为guid)或name.surname@xxx.com
(如果它不是guid)。这里的困难在于捕获的组必须具有相同的名称。
到目前为止,我有
(?<name>(?:\w{4}-){4}|[a-zA-Z.]{1,}@xxx\.com),
但这也会捕获我不想要的 7ccd-6293-4343-8e50 - 或 6293-4343-8e50-e1d5 - 。< / p>
我也在想\\\0(?<name>(?:\w{4}-){4}|[a-zA-Z.]{1,}@xxx\.com)(?:(?:@xxx\.com)?\\\0),
之类的东西
但是有没有办法不重复xxx.com部分(因为它比这更复杂)。此外,这依赖于查找我不想要的\\0
,因为我不知道这是否会在字符串中的其他位置找到。
谢谢..
答案 0 :(得分:1)
以下正则表达式将数字6086-afde-4e46-8886-
和电子邮件name.surname@xxx.com
匹配到相同的组名中,而不使用开始序列\ 0
(?<_name_>[A-Za-z]+\.[A-Za-z]+@xxx\.com|(?:[\w]{4}-){4}(?=@xxx\.com))
此正则表达式使用正面预测(?=@xxx\.com)
来匹配数字,而不需要@xxx.com
。
答案 1 :(得分:0)
试试这个
\\0(?<_name_>(?:[\w\-\.]+))@xxx\.com
并在方括号内添加所有允许的字符
演示:http://regexhero.net/tester/?id=be0fed5e-1d24-43cc-9db9-812311c17d61
答案 2 :(得分:0)
好像你正试图获得第一场比赛。如果是,请尝试以下正则表达式。
^.*?(?<name>(?:\w{4}-){4}|[a-zA-Z.]{1,}@xxx.com)