如何在python中逐个字符地拆分unicode字符串?

use*_*896 4 python string unicode split

我的网站支持多种印度语言.用户可以动态更改语言.当用户输入一些字符串值时,我必须将字符串值拆分为单独的字符.所以,我正在寻找一种方法来编写一个适用于英语和一组精选印度语言的通用函数.我搜索过各个站点,但是,似乎没有通用的方法来处理这个要求.有特定于语言的实现(例如,泰米尔语的Open-Tamil包实现了get_letters)但我找不到一种常见的方法来分割或迭代unicode字符串中的字符,并考虑字形.

我尝试过的众多方法之一:

name = u'?????'
print name
for i in list(name):
  print i

#expected output
?????
?
??
??

#actual output
?????
?
?
?
?
?

#Here is another an example using another Indian language
name = u'?????'
print name
for i in list(name):
  print i

#expected output
?????
???
??

#actual output
?????
?
?  
? 
?
?
Run Code Online (Sandbox Code Playgroud)

jfs*_*jfs 6

要获得任何语言的"用户感知"字符,请使用\X(eXtended grapheme cluster)正则表达式:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import regex # $ pip install regex

for text in [u'?????', u'?????']:
    print("\n".join(regex.findall(r'\X', text, regex.U)))
Run Code Online (Sandbox Code Playgroud)

产量

?
??
??
???
??
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

解决此问题的方法是将所有“ L”类别字符与其后继的“ M”类别字符分组:

>>> regex.findall(ur'\p{L}\p{M}*', name)
[u'\u0ba4', u'\u0bae\u0bbf', u'\u0bb4\u0bcd']
>>> for c in regex.findall(ur'\p{L}\p{M}*', name):
...   print c
... 
?
??
??
Run Code Online (Sandbox Code Playgroud)

regex