Con*_*ion 9 python string unicode multilingual cjk
我有多种语言的字符串,包括使用空格作为单词分隔符(英语,法语等)的语言和不使用空格的语言(中文,日语,韩语).
给定这样的字符串,我想将英文/法文/等部分分成使用空格作为分隔符的单词,并将中文/日文/韩文部分分成单个字符.
我想将所有这些分离的组件放入一个列表中.
一些例子可能会说明这一点:
案例1:仅英文字符串.这种情况很简单:
>>> "I love Python".split()
['I', 'love', 'Python']
Run Code Online (Sandbox Code Playgroud)
案例2:仅限中文的字符串:
>>> list(u"????")
[u'\u6211', u'\u7231', u'\u87d2', u'\u86c7']
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以将字符串转换为中文字符列表.但是在列表中我得到了unicode表示:
[u'\u6211', u'\u7231', u'\u87d2', u'\u86c7']
Run Code Online (Sandbox Code Playgroud)
如何让它显示实际字符而不是unicode?就像是:
['?', '?', '?', '?']
Run Code Online (Sandbox Code Playgroud)
??
案例3:英文和中文混合:
我想转一个输入字符串,如
"??Python"
Run Code Online (Sandbox Code Playgroud)
并把它变成这样的列表:
['?', '?', 'Python']
Run Code Online (Sandbox Code Playgroud)
有可能做那样的事吗?
我以为我也会展示正则表达式方法.这对我来说不合适,但这主要是因为我所看到的所有特定于语言的i18n奇怪让我担心正则表达式可能对所有这些都不够灵活 - 但你可能根本不需要任何那个.(换句话说 - 过度设计.)
# -*- coding: utf-8 -*-
import re
def group_words(s):
regex = []
# Match a whole word:
regex += [ur'\w+']
# Match a single CJK character:
regex += [ur'[\u4e00-\ufaff]']
# Match one of anything else, except for spaces:
regex += [ur'[^\s]']
regex = "|".join(regex)
r = re.compile(regex)
return r.findall(s)
if __name__ == "__main__":
print group_words(u"Testing English text")
print group_words(u"????")
print group_words(u"Testing English text????")
Run Code Online (Sandbox Code Playgroud)
在实践中,您可能只想编译一次正则表达式,而不是每次调用.再次,填写字符分组的细节取决于您.
在 Python 3 中,如果需要,它还会拆分数字。
\n\ndef spliteKeyWord(str):\n regex = r"[\\u4e00-\\ufaff]|[0-9]+|[a-zA-Z]+\\\'*[a-z]*"\n matches = re.findall(regex, str, re.UNICODE)\n return matches\n\nprint(spliteKeyWord("Testing English text\xe6\x88\x91\xe7\x88\xb1Python123"))\nRun Code Online (Sandbox Code Playgroud)\n\n=> [\'测试\', \'英语\', \'文本\', \'\xe6\x88\x91\', \'\xe7\x88\xb1\', \'Python\', \ ‘123\’]
\n| 归档时间: |
|
| 查看次数: |
3083 次 |
| 最近记录: |