如何保留åäö但从字符串中删除所有其他非字母数字字符? (我发现了类似的问题,但似乎没有一个正确的答案。)
我尝试了扩展正则表达式以尝试让它跳过子中的åäö之类的东西,但它似乎只是让正则表达式停止工作,让空白等等留下来。 我通常不是在python中编程,只是想帮助一个朋友,所以可能有一些更好的方法来清理字符串而不是使用re。
从谷歌搜索我认为它与Unicode有关,但没有好的解决方案。
def ordnaText(text):
text = text.lower()
text = re.sub('\W', '', text)
if text.isalnum() == True:
return text
答案 0 :(得分:2)
您可以将\W
替换为[^\wåäö]
。
但是,如果字符串包含重音字符,则测试text.isalnum
将返回false。
答案 1 :(得分:2)
您正在尝试与编码的输入进行匹配; Python 2中的raw_input()
始终返回一个字节字符串。这意味着您使用的终端,控制台或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的关系的更多信息,我建议您阅读:
答案 2 :(得分:1)
尝试在re.UNICODE
re.sub()