gpt4 book ai didi

python - 从字符串中删除非字母数字但保留编码的非 ASCII 字符 åäö

转载 作者:行者123 更新时间:2023-11-28 21:56:57 26 4
gpt4 key购买 nike

如何保留 åäö 但从字符串中删除所有其他非字母数字字符?(我发现了类似的问题,但似乎都没有正确的答案。)

我尝试了一些东西,比如扩展正则表达式,试图让它跳过子句中的 åäö,但它似乎只是让正则表达式停止一起工作,让空格等保持不变。我通常不使用 python 编程,只是想帮助 friend ,所以可能有比使用 re 更好的清理字符串的方法。

从谷歌搜索我认为它与Unicode有关,但没有好的解决方案。

def ordnaText(text): 
text = text.lower()
text = re.sub('\W', '', text)
if text.isalnum() == True:
return text

最佳答案

您正在尝试匹配编码输入; 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 的关系,我建议您阅读:

关于python - 从字符串中删除非字母数字但保留编码的非 ASCII 字符 åäö,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com