如何在python中按字符拆分unicode字符串?

如何在python中按字符拆分unicode字符串?,python,string,unicode,split,Python,String,Unicode,Split,我的网站支持多种印度语言。用户可以动态更改语言。当用户输入一些字符串值时,我必须将字符串值拆分为单个字符。因此,我正在寻找一种方法来编写一个通用函数,该函数适用于英语和一组精选的印度语言。我已经搜索了多个站点,但是,似乎没有通用的方法来处理这个需求。有一些特定于语言的实现(例如,Open Tamil package for Tamil implements get_letters),但我找不到一种通用的方法来拆分或迭代unicode字符串中的字符,同时考虑到字符集 我尝试过的众多方法之一: na

我的网站支持多种印度语言。用户可以动态更改语言。当用户输入一些字符串值时,我必须将字符串值拆分为单个字符。因此,我正在寻找一种方法来编写一个通用函数,该函数适用于英语和一组精选的印度语言。我已经搜索了多个站点,但是,似乎没有通用的方法来处理这个需求。有一些特定于语言的实现(例如,Open Tamil package for Tamil implements 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
हिंदी
ह
ि  
ं 
द
ी

解决此问题的方法是将所有“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
... 
த
மி
ழ்

要获取“用户感知”字符(无论是何种语言),请使用
\X
()正则表达式:

#!/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)))
输出
uniseg
在这方面效果非常好,而且还可以。这个问题的另一个答案适用于国际Unicode字符,但如果用户输入Emoji,答案就没有意义了。以下解决方案将起作用:


emoji=u'Hi,你的意思是“regex”还是“re”?我尝试了're.findall(ur'\p{L}\p{M}*',name'),它返回了一个空列表。我的意思是“regex”。这就是我写“regex”的原因。并且包含了一个指向
regex
的链接。事实证明,我不能在我的appengine应用程序中使用
regex
模块,因为
regex
不是纯python,而是包含
c
扩展。使用Python的
re
模块或其他方法是否有解决此问题的替代方案?您必须使用
unicodedata.category()
依次获取每个字符的类别并对其进行相应的分组。虽然这在这种特殊情况下可能有效,
\X
是拉出单个grapheme群集的首选机制。
த
மி
ழ்
हिं
दी