Sql 用于识别和替换电子邮件的REGEXP
长话短说,我需要确定一封可能有两种不同结尾的电子邮件: "HREmail@companyabc.com" "HREmail@company.com" 我需要将上述两个示例的实例替换为: "ITEmail@company.com" 我对甲骨文基本上是新手,以下是我目前掌握的信息:Sql 用于识别和替换电子邮件的REGEXP,sql,oracle,Sql,Oracle,长话短说,我需要确定一封可能有两种不同结尾的电子邮件: "HREmail@companyabc.com" "HREmail@company.com" 我需要将上述两个示例的实例替换为: "ITEmail@company.com" 我对甲骨文基本上是新手,以下是我目前掌握的信息: CASE WHEN REGEXP_LIKE(EMAIL_LIST, '^HREmail@companyabc.com$', 'i') THEN REGEXP_REPLACE(EMAIL_LIST,'^HREmai
CASE
WHEN REGEXP_LIKE(EMAIL_LIST, '^HREmail@companyabc.com$', 'i') THEN REGEXP_REPLACE(EMAIL_LIST,'^HREmail@companyabc.com$', ';ITEmail@company.com;')
WHEN NOT REGEXP_LIKE(EMAIL_LIST, '^HREmail@companyabc.com$', 'i') THEN EMAIL_LIST || ';ITEmail@company.com;'
ELSE EMAIL_LIST
END
保存电子邮件的电子邮件列表列包含以“;”分隔的电子邮件。例如:'email1@company.com;email2@company.com;hremail@companyabc.com;hremail@comapny.com;'代码>
是该列的一行。我想更改它,使上面的行看起来像这样:
email1@company.com;email2@company.com;ITEmail@company.com
检查其中一封电子邮件很容易,而且我知道我可以放一个或。。。并在另一封电子邮件中添加另一个类似REGEXP_的语句,但有没有办法在一个类似REGEXP_的语句中查找这两封电子邮件
谢谢是的,有。将“abc”设置为可选:
HREmail@company(abc)?\.com$
别忘了在正则表达式中避开圆点
问题:是否需要用ITEmail@company.com
?这不是代码中的内容。在您的代码中,在第一种情况下是ITEmail@companyabc.com
如果必须用ITEmail@company.com
,这很简单。对于更有趣的案例:
regexp_replace(<string>, '^HR(Email@company(abc)?\.com)$', 'IT\1')
编辑(许多问题中的一个)-我在后面的问题中看到,您需要替换为分号分隔的列表,而不是完整的字符串。那么,为什么在您的尝试中使用了^和$anchors呢
不管怎样,你可以把我上面给你的东西改编成一个清单。如果您需要有关该部分的帮助(这与主要问题无关,即如何在单个regexp中处理两个“待替换”字符串)。电子邮件列表是什么样子的?您的代码使它看起来像包含一个逗号分隔的列表。为了澄清您的问题,请提供几行示例数据以及您想要的结果(以表格文本的形式)。如果您的模式中似乎没有任何变量片段,那么我看不出正则表达式比旧的好。也许我们缺少了一些背景。
with
sample_inputs(str) as (
select 'HR@mycompany.com' from dual union all
select 'HREmail@company.com' from dual union all
select 'ITEmail@company.com' from dual union all
select 'HR@companyabc.com' from dual union all
select 'HREmail@companyabc.com' from dual union all
select 'ACEmail@company.com' from dual
)
select str as old_str,
regexp_replace(str, '^HR(Email@company(abc)?\.com)$', 'IT\1')
as new_str
from sample_inputs
;
OLD_STR NEW_STR
------------------------ ------------------------
HR@mycompany.com HR@mycompany.com
HREmail@company.com ITEmail@company.com
ITEmail@company.com ITEmail@company.com
HR@companyabc.com HR@companyabc.com
HREmail@companyabc.com ITEmail@companyabc.com
ACEmail@company.com ACEmail@company.com