我正在尝试从字符串中提取电子邮件地址。大多数条目具有类似的结构,例如:
From: John Doe Sent:Monday, October 10, 2013 11:59 AM
To: '**xyz123@yahoo.com**'Cc:mno456@comcast.net (the lack of spaces is intentional)
另一方面,有些格式不同,即不包括抄送:等等。目标是提取到:电子邮件地址,即 xyz123 @ yahoo .com 在我们的例子中。
我尝试过使用INSTR
和SUBSTR
,但运气不佳。有没有办法使用RegEx提取这个电子邮件地址,或者是否有人有任何其他想法。
答案 0 :(得分:1)
试试这个:
SELECT Trim( both '*' from Trim( both '''' from
Substr( eml,
instr( eml, 'To:' ) + 4,
CASE WHEN instr( eml, 'Cc:' ) > 0
THEN instr( eml, 'Cc:' ) - ( instr( eml, 'To:' ) + 4 )
ELSE 1000 END
)))
FROM emails;
演示 - > http://www.sqlfiddle.com/#!4/5f181/5
答案 1 :(得分:0)
这将是这种形式:
select
Ltrim(regexp_substr(column_name,'To:''[[:alpha:]][[:alnum:]]*.?[[:alnum:]]*@[[:alpha:]][[:alnum:]]*[.][[:alpha:]]+''',1,1),'To:')
from
table_name;
当然正在做出假设(例如只有一个收件人)。人们需要使用交替运算符来涵盖人们可能遇到的其他形式。
关于我的正则表达式:
字母字符类+字母数字字符类(零或更多)+句点(零或1)+字母数字字符类(零或更多)@ +字母字符类+字母数字字符类(零或更多)