Python 如何在特定字符之前从字符串中删除特殊字符?

Python 如何在特定字符之前从字符串中删除特殊字符?,python,regex,pandas,special-characters,str-replace,Python,Regex,Pandas,Special Characters,Str Replace,我有一个df,它有一个名为EMAIL的列,其中包含各种电子邮件地址。我想删除@前面的所有特殊字符,特别是.、-、和u,并添加一个新列new\u EMAIL。例如,如果df['EMAIL']='ab\u cd_123@email.com“,我想要df['NEW\u EMAIL']=”abcd123@email.com“ 我能够用下面的代码成功地删除句点,但似乎无法删除同一行代码中的下划线或破折号。现在,我重复同一行代码来删除这三个特殊字符,这非常难看。谁能帮我一把吗?提前谢谢你的帮助 df['NE

我有一个
df
,它有一个名为
EMAIL
的列,其中包含各种电子邮件地址。我想删除@前面的所有特殊字符,特别是.、-、和u,并添加一个新列
new\u EMAIL
。例如,如果
df['EMAIL']='ab\u cd_123@email.com“
,我想要
df['NEW\u EMAIL']=”abcd123@email.com“

我能够用下面的代码成功地删除句点,但似乎无法删除同一行代码中的下划线或破折号。现在,我重复同一行代码来删除这三个特殊字符,这非常难看。谁能帮我一把吗?提前谢谢你的帮助

df['NEW_EMAIL'] = df.EMAIL.str.replace(r'\.(?!.{1,4}$)','', regex = True)
df['NEW_EMAIL'] = df.NEW_EMAIL.str.replace(r'\.(?!.{1,4}$)','', regex = True)
df['NEW_EMAIL'] = df.NEW_EMAIL.str.replace(r'\.(?!.{1,4}$)','', regex = True)
你可以用

df['NEW_EMAIL']=df['EMAIL'].str.replace(r'[.[u-](?=[^@]*@'),,regex=True)
看。详情:

  • [.-]
    -a
    -
    字符
  • (?=[^@]*@)
    -一种正向前瞻,要求存在除
    @
    以外的任何零个或多个字符,然后在当前位置右侧立即出现一个
    @
    字符
如果需要替换/删除任何特殊字符,应使用

df['NEW_EMAIL']=df['EMAIL'].str.replace(r'[\W_](?=[^@]*@'),regex=True)
参见熊猫测试:

>>将熊猫作为pd导入
>>>df=pd.DataFrame({'EMAIL':['ab_cd_123@email.com","ab_cd.12",-3@email.com']})
>>>df['EMAIL'].str.replace(r'[.\u-](?=[^@]*@'),,regex=True)
0abcd123@email.com
1.abcd123@email.com
名称:电子邮件,数据类型:对象

这正是我一直在寻找的!非常感谢你的帮助@casi_cielo32如果您想删除其中的任何特殊字符,请将模式中的
[.\u-]
替换为
[\W\u]
。我在答案中添加了这个版本,因为它可能对其他人有用。