我有一个2列的表。(第2列基本上是多个电子邮件的追加列表)
| 卡塞德|文本|
| --------------|--------------|
| 一百零一|来自:ABHI RATHI〈(〉〈〈)〉ABHIRATHI@XYZ.COM〉发送:2022年6月17日,星期五,下午12:33至:VR,SARATH〈(〉〈〈)〉SARATH.VR@ABC.COM〉;主题:回复:日志编号20092017656:[安全小组确认存在可疑活动] [所需措施]来自:YUAN LN〈(〉〈〈)〉YIQUANLIN@XYZ.COM〉发送:2022年6月10日,星期五,下午3:40至:VR,SARATH〈(〉〈〈)〉SARTH.VIR@ABC.COM〉SINGH,ROHINI〈(〉〈〈)〉ROSHINI.SINGH@PQR.COM〉主题:回复:日志编号20092017656:你好,对不起,我今天休假,所以回复晚了,下周一能给我打个电话吗?|
所需输出:
| 案例ID|文本|
| --------------|--------------|
| 一百零一|主题:回复:日志编号20092017656:[安全小组确认有可疑活动] [需要采取的行动]主题:回复:日志编号20092017656:你好,对不起,我今天休假,所以回复晚了,下周一能给我打个电话吗?|
从'FROM:'删除到'subject'之前的'〉'。只保留内容并删除不必要的文本
我试过这个:
with test as
(
select 'FROM: ABHI RATHI <(><<)>ABHIRATHI@XYZ.COM> SENT: FRIDAY, JUNE 17, 2022 12:33 PM TO: VR, SARATH <(><<)>SARATH.VR@ABC.COM>; SUBJECT: RE: LOG # 20092017656 : [ SECURITY TEAM IDENTIFY THERE IS SUSPICION ACTIVITY ] [ ACTIONS REQUIRED ] FROM: YUAN LN <(><<)>YIQUANLIN@XYZ.COM> SENT: FRIDAY, JUNE 10, 2022 3:40 PM TO: VR, SARATH <(><<)>SARTH.VIR@ABC.COM> SINGH, ROHINI <(><<)>ROSHINI.SINGH@PQR.COM>SUBJECT: RE: LOG # 20092017656 : HI SARTH SORRY FOR THE LATE REPLY AS I AM ON LEAVE TODAY CAN WE HAVE A CALL NEXT MONDAY? THANKS AND REGARDS YUAN' as text from dual
)
select regexp_replace(text, 'FROM:[[:print:]]*[\.][a-zA-Z]{2,4}[\>]','' )
from test
得到输出:
主题:回复:日志编号20092017656:你好,对不起,我今天休假,所以回复晚了,下周一能给我打个电话吗?
问题:缺少第一封电子邮件的内容。
所需输出:
主题:回复:日志编号20092017656:[安全小组确认存在可疑活动] [所需措施]主题:回复:日志编号20092017656:你好,对不起,我今天休假,所以回复晚了,下周一能给我打个电话吗?
2条答案
按热度按时间2fjabf4q1#
您可以在
FROM
和SUBJECT
之间使用非贪婪(用问号表示)匹配,并将此匹配替换为SUBJECT
:fiddle
但是您的示例数据在最后一个
>
和SUBJECT
之间有额外的标点符号(第一次出现时为分号,最后一次出现时为空),因此您可能需要为允许的字符集提供额外的匹配模式。fhity93d2#
我不知道 Oracle 的正则表达式引擎能做什么,但如果它处理正lookaheads和组,那么我会使用以下模式:
替换为
$1.
,以便将主体放回,并在其后面添加最后一个点。你可以在这里测试:https://regex101.com/r/Wi19AK/1
现在,如果这个在Oracle上不起作用,那么你可以尝试删除
FROM: ...
部分。但是,由于你并不总是用>
来完成字段,你仍然需要捕获SUBJECT:
并将其放回。但是这样你就不会使用lookahead:但是使用这个更简单的模式,你不需要解决你想在每个主题后面添加的点。在这里查看它的操作:https://regex101.com/r/Wi19AK/2
要理解模式本身,请查看regex 101上的链接,因为它们在右侧给予了我们一个很好的解释。
编辑 Oracle
由于 Oracle 也不处理
\b
(对于这样一个众所周知的数据库引擎来说,这相当令人惊讶),你将不得不使用它。它不太精确,但应该可以,因为这些单词后面跟着:
字符,所以可能不会出现在你的其余内容中。搜索
\s*FROM:(.*?)SUBJECT:
并替换为. SUBJECT:
。在这里测试:https://regex101.com/r/Wi19AK/4
然后,您必须通过第二次搜索删除第一个点和空格-用
^\.\s
替换为模式和空替换。在SQL中: