pyList

python 分割中文英文混合字符串的正确方法

python 里的字符编码不统一导致中英文的处理有不同的结果,下面介绍中文英文混合字符串 split 的方法。

python 中文英文混合split

分割词

#!/usr/bin/env python
# -*- coding: utf-8 -*-

s = '我爱北京天安门python'

s2 = ''
if not isinstance(s, unicode):
    s2 = s.decode("utf-8")

slist = []
keys = []
for i in s2:
    print i
    slist.append(i)
    key = '%X' % ord(i)
    keys.append(key)

print len(slist)
print slist

print len(keys)
print keys

# =====================

s = u'我爱北京天安门python'
slist = []
keys = []
for i in s:
    if not isinstance(i, unicode):
        i = i.decode("utf-8")
    print i
    slist.append(i)
    key = '%X' % ord(i)
    keys.append(key)

print len(slist)
print slist

print len(keys)
print keys

用正则

import re
 
s = 'hi新手oh'.decode('utf-8') #举个栗子是字符串s,为了匹配下文的unicode形式,所以需要解码
p = re.compile(ur'[\u4e00-\u9fa5]') #这里是精髓,[\u4e00-\u9fa5]是匹配所有中文的正则,因为是unicode形式,所以也要转为ur
 
print p.split(s) #使用re库的split切割

稍复杂的分切

中文按字断开,英文按单词分开,数字按空格等特殊符号断开

import re

def get_word_list(s1):
    # 把句子按字分开,中文按字分,英文按单词,数字按空格
    regEx = re.compile('[\\W]*')    # 我们可以使用正则表达式来切分句子,切分的规则是除单词,数字外的任意字符串
    res = re.compile(r"([\u4e00-\u9fa5])")    #  [\u4e00-\u9fa5]中文范围

    p1 = regEx.split(s1.lower())
    str1_list = []
    for str in p1:
        if res.split(str) == None:
            str1_list.append(str)
        else:
            ret = res.split(str)
            for ch in ret:
                str1_list.append(ch)

    list_word1 = [w for w in str1_list if len(w.strip()) > 0]  # 去掉为空的字符

    return  list_word1
本文标签: python 字符串 中文 分割 英文
本文网址: https://pylist.com/t/1403081724 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
验证码图片
相关推荐