如何过滤掉Python中的unicode字符?

时间:2013-06-11 08:36:19

标签: python unicode

我现在正在python中处理unicode值。首先,所有问题和答案都有很多帮助。谢谢:))

接下来,我陷入了我想要隔离每种语言的unicode值的项目中。

类似地,某个函数只接受来自unicode值0900到097F的印地文代码。现在我希望它拒绝其余的所有unicode值......

到目前为止,我已经完成了

for i in range(len(l1)):
    for j in range(len(l1[i])):
        unn = '%04x' % ord(l1[i][j])
        unn1 = int(unn, 16)
        if unn1 not in range(2304, 2431):
            l1[i] = l1[i].replace(l1[i][j], '')

此代码从列表l1中获取值并执行我想要的操作。但问题是它解决了一个字符,然后它终止于第3行

再次手动运行它时,它会运行并再次解决一个或两个字符,然后再次终止。

我甚至不能把它放在一个循环中......

请帮忙


更新:

我不想再发一篇文章,所以只使用这一篇 我得到了一些帮助并修改了代码。有索引问题。

for i in range(len(dictt)):
    j=0
    while(1):
        if j >= len(dictt[i]):
            break
        unn = '%04x' % ord(dictt[i][j])
        unn1 = int(unn, 16)
        j = j+1
        if unn1 not in range(2304, 2431):
            dictt[i] = dictt[i].replace(dictt[i][j-1], '')
            j=0

这段代码完全适用于我之前的查询,我的意思是特定范围,但如果我改变范围或功能,那么同样的问题就出现在同一行。 为什么该行给出错误?

3 个答案:

答案 0 :(得分:1)

最好的解决方案是使用正则表达式来过滤掉不需要的字符。你基本上需要一个正则表达式来匹配你的印地语字符,但据我所知,印地语字符在“重新”模块中被删除,所以我建议使用以下命令下载“正则表达式”模块:

  

$ pip install regex

之后,如果所有单词都用印地语写成,你可以简单地逐字逐句检查:

// kinda pseudo code, sorry
import regex
yourString = your_string_in_hindi
words = yourString.split(" ")
for word in words:
    if not regex.match(HINDI_WORD_REGEX, word):
        // whatever you want to do

您还可以在此处找到与您的问题相关的一些有用信息:

Python - pyparsing unicode characters

Python unicode regular expression matching failing with some unicode characters -bug or mistake?

希望这至少可以帮助你开始。祝你好运!

答案 1 :(得分:0)

def filter(text, range):
    return ''.join([char for char in text if ord(char) in range])

答案 2 :(得分:0)

试试这个:

def converter(string_, range_ = (2304, 2431)):
    """ Filter the unicode characters """
    min, max = range_
    return ''.join(c for c in string_ if (min <= ord(c) < max))