Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex python字符串仅替换保留非英语字母的特殊字符_Regex_Pandas_String_Dataframe_Python 3.8 - Fatal编程技术网

Regex python字符串仅替换保留非英语字母的特殊字符

Regex python字符串仅替换保留非英语字母的特殊字符,regex,pandas,string,dataframe,python-3.8,Regex,Pandas,String,Dataframe,Python 3.8,如何仅从字符串中删除特殊字符,而不删除外语字符。当我尝试下面的代码时,它会删除特殊字符和非英语字母。但我只想删除特殊字符(出现在普通英语句子中的特殊字符) 上面的代码导致 0 A 1 B 2 C 3 D 4 E 5 F 6 ds 7 G 8 dsds 9 Endstrisi Name: name, dt

如何仅从字符串中删除特殊字符,而不删除外语字符。当我尝试下面的代码时,它会删除特殊字符和非英语字母。但我只想删除特殊字符(出现在普通英语句子中的特殊字符)

上面的代码导致

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
但我想要的是

上面的代码导致

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中,默认情况下,所有正则表达式速记字符类(如
\w
\d
\s
)都支持Unicode,因为默认情况下,
re.U
re.Unicode
)标志处于启用状态。因此,如果在求反字符类中使用
\w
构造,它将匹配除任何Unicode字母、数字和
\u
以外的所有字符

由于您不希望匹配空格,
\s
被添加到否定字符类中

下划线不能包含在否定字符类中(因为它将不匹配),您需要一个替代项来匹配

因此,模式匹配

  • [^\w\s]
    -除Unicode字母、数字、空格和
    \uuuu
  • |
    -或
  • -下划线

您的预期输出似乎与您得到的相同。但是您只需要
df['name'].str.replace(r'[^\w\s]|",'',regex=True)
我的印象是
\w
只匹配英文字母和数字。不,在Python 3中,regex速记字符类默认支持Unicode,默认情况下,
re.U
标志处于启用状态。