首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在解析outlook电子邮件字符串,只需要尖括号文本smtp地址

正在解析outlook电子邮件字符串,只需要尖括号文本smtp地址
EN

Stack Overflow用户
提问于 2020-06-19 14:37:07
回答 2查看 52关注 0票数 2

我有一根线

代码语言:javascript
复制
Casperfoo DataOps <casperf@domain .com>;Booya Support <iptsupport@domain .com>; Tripped Support <Tsupport@domain capital.com>; Smith, Joe: IB Reference Data (NYK) <joe.smith@domain .com>; Johnson, Walter: IB Reference Data (PUN) <walter.johnson@domain .com>;

我希望这能行得通

代码语言:javascript
复制
cat  /tmp/foo | perl -nle 'print /\<(\w+)\>/'

但事实并非如此。我想要的只是<和>之间的字符串。我不需要糟糕的outlook别名-只需要smtp地址。

这是预期的输出

代码语言:javascript
复制
casperf@domain.com 
iptsupport@domain.com 
Tsupport@domaincapital.com  
joe.smith@domain.com 
walter.johnson@domain.com
EN

回答 2

Stack Overflow用户

发布于 2020-06-19 15:16:54

和我都希望这能行得通

那么你的期望是错误的:-)如果你阅读the regex documentation (或the tutorial),也许你会更接近。

一些问题:

  1. 你和\w+匹配。转义序列\w匹配字母、数字和下划线。电子邮件地址包含其他字符(例如,@),因此不匹配任何字符。让我们将\w+替换为\S+ (以匹配所有非空格characters).
  2. That仍然不起作用,因为您的电子邮件地址似乎都包含空格(例如<casperf@domain .com>)。好的,让我们使用<.+>来匹配任何东西,但是添加?来强制最小匹配- <.+?>.
  3. That只给我们第一个匹配,因为这就是我们所要求的。我们需要在match运算符中添加/g以获取所有匹配。

我们现在有:

代码语言:javascript
复制
$ cat  /tmp/foo | perl -nle 'print /\<(.+?)\>/g

这就给我们提供了:

代码语言:javascript
复制
casperf@domain .comiptsupport@domain .comTsupport@domain capital.comjoe.smith@domain .comwalter.johnson@domain .com

所以我们得到了所有的匹配,但它们都在同一条线上。最简单的解决方法是将匹配项放在一个后缀for循环中,这样print()就可以一次获取一个匹配项:

代码语言:javascript
复制
$ cat  /tmp/foo | perl -nle 'print for /\<(.+?)\>/g'
casperf@domain .com
iptsupport@domain .com
Tsupport@domain capital.com
joe.smith@domain .com
walter.johnson@domain .com
票数 3
EN

Stack Overflow用户

发布于 2020-06-19 14:53:21

试试这个:

代码语言:javascript
复制
cat /tmp/foo | perl -nle 'while (/<([^>]+)>/g){ print $1; }'

应该能行得通。试过了

代码语言:javascript
复制
echo "Casperfoo DataOps <casperf@domain .com>;Booya Support <iptsupport@domain .com>; Tripped Support <Tsupport@domain capital.com>; Smith, Joe: IB Reference Data (NYK) <joe.smith@domain .com>; Johnson, Walter: IB Reference Data (PUN) <walter.johnson@domain .com>;" | perl -nle 'while (/<([^>]+)>/g){ print $1; }'

这给了我:

代码语言:javascript
复制
casperf@domain .com
iptsupport@domain .com
Tsupport@domain capital.com
joe.smith@domain .com
walter.johnson@domain .com
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62464618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档