从电子邮件字符串中删除特殊符号

Posted

技术标签:

【中文标题】从电子邮件字符串中删除特殊符号【英文标题】: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,'!#$%^&*()=+','?'),'?') 怎么样? 在描述中提供了所需的结果) 【参考方案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 的位置并获取它们之间的子字符串。

以上是关于从电子邮件字符串中删除特殊符号的主要内容,如果未能解决你的问题,请参考以下文章

从R中的字符串中删除所有特殊字符?

除了文本,如何从文本中删除数字、标点、空格和特殊字符? [复制]

Apex - 从字符串中删除除“+”之外的特殊字符

Linux下删除带有特殊符号文件名的文件

Linux Shell编程中的特殊符号

删除 PHP 中可以从其他 textEditor 输入的特殊字符