python 字符串仅替换保留非英文字母的特殊字符
python string replace only special characters keeping non-english alphabets
如何只从字符串中删除特殊字符,而不是外语字符。当我尝试下面的代码时,它会同时删除特殊字符和非英文字母。但是我只想去掉特殊字符(出现在正规英文句子中的特殊字符)。
import pandas as pd
from io import StringIO
data = """
id,name
1,A
1,B
1,C
1,D
2,E
2,F
2,ds
2,G
2, dsds
3,Endüstrisi`
"""
df = pd.read_csv(StringIO(data))
df['name'].str.replace('[^a-zA-Z\d\s]','',regex=True)
以上代码的结果是
0 A
1 B
2 C
3 D
4 E
5 F
6 ds
7 G
8 dsds
9 Endstrisi
Name: name, dtype: object
但我想要的是
以上代码的结果是
0 A
1 B
2 C
3 D
4 E
5 F
6 ds
7 G
8 dsds
9 Endüstrisi
Name: name, dtype: object
您可以使用
df['name'] = df['name'].str.replace(r'[^\w\s]|_', '', regex=True)
在 Python 3 中,所有正则表达式 shorthand 字符 classes(如 \w
、\d
、\s
)都是 Unicode 识别的默认情况下,因为 re.U
(re.UNICODE
) 标志默认处于打开状态。因此,如果您在否定字符 class 中使用 \w
构造,它会匹配除任何 Unicode 字母、数字和 _
.
之外的所有字符
由于您不想匹配空格,因此将 \s
添加到否定字符 class。
下划线不能包含在取反字符class中(因为那时它不会被匹配),你需要一个替代来匹配_
.
所以,模式匹配
[^\w\s]
- 除了 Unicode 字母、数字、空格和 _
之外的任何字符
|
- 或
_
- 下划线。
如何只从字符串中删除特殊字符,而不是外语字符。当我尝试下面的代码时,它会同时删除特殊字符和非英文字母。但是我只想去掉特殊字符(出现在正规英文句子中的特殊字符)。
import pandas as pd
from io import StringIO
data = """
id,name
1,A
1,B
1,C
1,D
2,E
2,F
2,ds
2,G
2, dsds
3,Endüstrisi`
"""
df = pd.read_csv(StringIO(data))
df['name'].str.replace('[^a-zA-Z\d\s]','',regex=True)
以上代码的结果是
0 A
1 B
2 C
3 D
4 E
5 F
6 ds
7 G
8 dsds
9 Endstrisi
Name: name, dtype: object
但我想要的是
以上代码的结果是
0 A
1 B
2 C
3 D
4 E
5 F
6 ds
7 G
8 dsds
9 Endüstrisi
Name: name, dtype: object
您可以使用
df['name'] = df['name'].str.replace(r'[^\w\s]|_', '', regex=True)
在 Python 3 中,所有正则表达式 shorthand 字符 classes(如 \w
、\d
、\s
)都是 Unicode 识别的默认情况下,因为 re.U
(re.UNICODE
) 标志默认处于打开状态。因此,如果您在否定字符 class 中使用 \w
构造,它会匹配除任何 Unicode 字母、数字和 _
.
由于您不想匹配空格,因此将 \s
添加到否定字符 class。
下划线不能包含在取反字符class中(因为那时它不会被匹配),你需要一个替代来匹配_
.
所以,模式匹配
[^\w\s]
- 除了 Unicode 字母、数字、空格和_
之外的任何字符
|
- 或_
- 下划线。