【问题标题】:How to remove special characters from a string before specific character?如何在特定字符之前从字符串中删除特殊字符?
【发布时间】:2024-01-11 10:00:01
【问题描述】:

我有一个df,它有一个名为EMAIL 的列,其中包含各种电子邮件地址。我想删除所有特殊字符,特别是 @ 之前的 .、- 和 _ 并附加一个新列 NEW_EMAIL。比如df['EMAIL'] = 'ab_cd_123@email.com',我要df['NEW_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)

【问题讨论】:

    标签: python regex pandas special-characters str-replace


    【解决方案1】:

    你可以使用

    df['NEW_EMAIL'] = df['EMAIL'].str.replace(r'[._-](?=[^@]*@)', '', regex=True)
    

    请参阅regex demo详情

    • [._-] - ._- 字符
    • (?=[^@]*@) - 正向前瞻,要求存在除 @ 之外的任何零个或多个字符,然后在当前位置右侧紧邻一个 @ 字符。

    如果你需要替换/删除任何特殊字符,你应该使用

    df['NEW_EMAIL'] = df['EMAIL'].str.replace(r'[\W_](?=[^@]*@)', '', regex=True)
    

    查看 Pandas 测试:

    >>> import pandas as pd
    >>> df = pd.DataFrame({'EMAIL':['ab_cd_123@email.com', 'ab_cd.12-3@email.com']})
    >>> df['EMAIL'].str.replace(r'[._-](?=[^@]*@)', '', regex=True)
    0    abcd123@email.com
    1    abcd123@email.com
    Name: EMAIL, dtype: object
    

    【讨论】:

    • 这正是我一直在寻找的!非常感谢您的帮助!
    • @casi_cielo32 以防万一您想删除那里的任何特殊字符,请将模式中的[._-] 替换为[\W_]。我将此版本添加到答案中,因为它可能对其他人有用。
    最近更新 更多