regexp_replace 使用否定前瞻来清理电子邮件地址

regexp_replace with negative lookahead to clean up email addresses

在 postgres 中,我使用 regexp_replace 来清理一些雅虎电子邮件地址。

SELECT regexp_replace(domain,'yahoo\.co[^\.].*','yahoo.com')  FROM table  

不幸的是,这个表达式与我想要 NOT MATCHyahoo.com.tw 类型相匹配。我希望正则表达式为:

不匹配:

yahoo.es
yahoo.co.jp
yahoo.com.tw  

匹配:

yahoo.com,
yahoo.com.
yahoo.com'

我已经研究这个几个小时了,并且查看了堆栈中的几个链接,如下所示: Regular expression to match a line that doesn't contain a word?

他们帮我写了一个负面的前瞻性预测,但似乎无法将其与 yahoo 部分结合起来

负面前瞻

     ^(?!.*(\.com?\.|\.[a-z]{2})).*$    

这里是regex101数据和公式。
任何建议将不胜感激。谢谢你。

此模式匹配您的 yahoo REPLACE 部分正下方的所有内容,而不匹配上面的良好案例:

^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$

Demo

下面的其他情况,如yahool.com,可以添加为可选匹配,如下所示:

^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$|^yahoo$|^yahool\.com|^yahooo\.com|^yahoo\.net|^yahoocom$

等但是,有些可以很容易地组合在一起。