如何仅保留字母数字、空格并过滤非ASCII字符?正则表达式优化求助
解决同时过滤非ASCII字符和非字母数字(除空格外)的问题
嘿,我明白你的需求了——你想用正则表达式移除所有非字母数字字符(除了空格),同时还要把非ASCII字符也过滤掉,对吧?
为什么原来的方法不生效
你之前用的re.sub(r'\W+', '', s)之所以会保留非ASCII字符,是因为Python的re模块默认采用Unicode模式:
\w在Unicode模式下匹配的是所有Unicode单词字符(包括中文、日文、希腊字母等非ASCII字母)\W则是匹配非单词字符,所以那些非ASCII的字母会被当成\w保留下来,不会被替换。
解决方案:精准匹配ASCII范围内的字符
我们可以用取反字符集[^...]来明确指定要保留的字符:只保留ASCII字母(大小写)、数字和空格,其他所有字符都替换为空。对应的正则表达式是:
import re original_str = 'This is a sentence, and here are non-english 托利 苏 !!11' processed_str = re.sub(r'[^a-zA-Z0-9\s]', '', original_str) print(processed_str)
运行这段代码后,输出就是你想要的:
This is a sentence and here are non-english 11
解释一下这个正则
[^a-zA-Z0-9\s]:方括号里的^表示“取反”,意思是匹配不在以下范围内的所有字符:a-zA-Z:所有ASCII大小写字母0-9:数字0到9\s:空格(包括普通空格、制表符等,如果只想保留普通空格,可以直接换成)
这样一来,不管是标点符号还是非ASCII字符(比如例子里的中文“托利 苏”),都会被替换为空,完美符合你的需求~
内容的提问来源于stack exchange,提问作者Filipe Aleixo
相关产品推荐
相关产品推荐

