【问题标题】:Remove special symbols from email string从电子邮件字符串中删除特殊符号
【发布时间】:2021-08-05 09:16:12
【问题描述】:

我需要替换电子邮件字符串中的一些字符,正是这样的操作:

lower_email = str.lower(str.split(email,'@')[0])
nopunc_email = re.sub('[!@#$%^&*()-=+.,]', ' ', lower_email)
nonum_email = re.sub(r'[0-9]+', '', nopunc_email).strip()

但在 SQL 中

我尝试使用表达式TRANSLATE(lower(email), 'a1_a.a-a@1-+()a ', 'a a a a'),但它没有给我解决方案。

提前致谢!

例如:

import re
email = 'some_email.example-2021@gmail.com'
lower_email = str.lower(str.split(email,'@')[0])
nopunc_email = re.sub('[!@_#$%^&*()-=+.,]', ' ', lower_email)
nonum_email = re.sub(r'[0-9]+', '', nopunc_email).strip()

result 'some email example'

【问题讨论】:

  • Привет!你能不能至少给我们一个期望的结果?
  • 样本数据和预期结果会有很大帮助,但 replace(translate(email,'!#$%^&*()=+','?'),'?') 怎么样?
  • 在描述中提供了所需的结果)

标签: sql regex oracle python-re


【解决方案1】:
SELECT email,
       TRIM(
         TRANSLATE(
           LOWER(SUBSTR(email, 1, INSTR(email, '@') - 1)),
           '!_#$%^&*()-=+.,0123456789',
           '               '
         )
       ) AS translated
FROM   table_name

其中,对于样本数据:

CREATE TABLE table_name (email) AS
SELECT 'some_email.example-2021@gmail.com' FROM DUAL;

输出:

EMAIL TRANSLATED
some_email.example-2021@gmail.com some email example

db小提琴here

【讨论】:

  • 非常感谢!附加问题,我如何按字符“拆分”字符串以获取其标记(在 pl/sql 中)?像 python str.split(email,'@')
  • @ЛюбовьПономарева 在答案中使用SUBSTRINSTRSUBSTR(email, 1, INSTR(email, '@') - 1) 获取@ 之前的子字符串,SUBSTR(email, INSTR(email, '@') + 1) 获取@ 之后的子字符串。
  • 但是当我有多个@?
  • @ЛюбовьПономарева 使用INSTR 查找@s 的位置并获取它们之间的子字符串。
猜你喜欢
  • 2020-11-19
  • 2011-04-11
  • 2016-01-23
  • 2017-06-15
  • 2020-06-04
相关资源
最近更新 更多