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 MATCH 的 yahoo.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?)?$
下面的其他情况,如yahool.com,可以添加为可选匹配,如下所示:
^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$|^yahoo$|^yahool\.com|^yahooo\.com|^yahoo\.net|^yahoocom$
等但是,有些可以很容易地组合在一起。
在 postgres 中,我使用 regexp_replace 来清理一些雅虎电子邮件地址。
SELECT regexp_replace(domain,'yahoo\.co[^\.].*','yahoo.com') FROM table
不幸的是,这个表达式与我想要 NOT MATCH 的 yahoo.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?)?$
下面的其他情况,如yahool.com,可以添加为可选匹配,如下所示:
^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$|^yahoo$|^yahool\.com|^yahooo\.com|^yahoo\.net|^yahoocom$
等但是,有些可以很容易地组合在一起。