如何从特定字符之前的字符串中删除特殊字符?
How to remove special characters from a string before specific character?
我有一个 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)
您可以使用
df['NEW_EMAIL'] = df['EMAIL'].str.replace(r'[._-](?=[^@]*@)', '', regex=True)
见regex demo。 详情:
[._-]
- 一个 .
、_
或 -
char
(?=[^@]*@)
- 一个积极的前瞻,需要存在除 @
之外的任何零个或多个字符,然后 @
字符紧邻当前位置的右侧。
如果你需要replace/remove任何特殊字符,你应该使用
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
我有一个 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)
您可以使用
df['NEW_EMAIL'] = df['EMAIL'].str.replace(r'[._-](?=[^@]*@)', '', regex=True)
见regex demo。 详情:
[._-]
- 一个.
、_
或-
char(?=[^@]*@)
- 一个积极的前瞻,需要存在除@
之外的任何零个或多个字符,然后@
字符紧邻当前位置的右侧。
如果你需要replace/remove任何特殊字符,你应该使用
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