如何保留åäö,但从字符串中删除所有其他非字母数字字符?(我发现了类似的问题,但似乎没有一个正确的答案。)
我尝试了诸如扩展正则表达式之类的操作,以尝试使其在子程序中跳过åäö,但似乎只是使正则表达式停止一起工作,让空格和此类字符保持不变。我通常不使用python进行编程,只是试图帮助一个朋友,所以可能有比使用re更好的方法来清理字符串。
从谷歌搜索的角度来看,我认为它与Unicode有关,但没有好的解决方案。
def ordnaText(text):
text = text.lower()
text = re.sub('\W', '', text)
if text.isalnum() == True:
return text
您正在尝试与编码输入进行匹配;raw_input()
在Python 2中总是返回一个字节字符串。这意味着您使用的终端,控制台或IDE决定输入使用哪种编码。
尝试使用正则表达式匹配非ASCII字符,使用字节字符串要求您精确匹配编码的字节,这通常意味着终端环境或源代码编辑器设置的任何更改都将导致匹配失败。
您要在raw_input()
此处显式解码,并使用Unicode匹配:
import sys
import re
def ordnaText(text):
text = text.lower()
text = re.sub(u'\W', '', text, flags=re.UNICODE)
if text.isalnum() == True:
return text
userinput = raw_input('....')
userinput = userinput.decode(sys.stdin.encoding)
something = ordnaText(userinput)
sys.stdin.encoding
告诉您Python认为输入编解码器是什么。flags=re.UNICODE
在正则表达式引擎中使用专门打开unicode支持的开关。并u'\W'
为引擎提供Unicode字符串文字;后者是可选的,但最好是明确的。
如果您想了解有关Unicode,编码的字节字符串及其与Python的关系的更多信息,我建议您阅读:
每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)作者:Joel Spolsky
Ned Batchelder的实用Unicode
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句