现在的位置: 首页 > 综合 > 正文

python的正则匹配unicode

2014年01月15日 ⁄ 综合 ⁄ 共 940字 ⁄ 字号 评论关闭

  最近用到python的正则表达式解析不同的语言,发现有不少细节很困扰人,写下来留念。

  python正则解析unicode的注意点。一是pattern前需要加u来escape unicode,而是源字符串也得是unicode。因此,一个解析unicode的语句应该这样写

re.sub(ur'.*[\u4E00-\u9FA5]+.*', '', unicode('中文'))

  对于英文,中文,日文,韩文,常见的unicode字符范围如下

epre = re.compile(r"[\s\w]+")
chre = re.compile(ur".*[\u4E00-\u9FA5]+.*")
jpre = re.compile(ur".*[\u3040-\u30FF\u31F0-\u31FF]+.*")
hgre = re.compile(ur".*[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]+.*")

  对于更细致的unicode范围,请参考这里http://www.iteye.com/topic/558050

  对于正则主要的几个函数match,search,split,findall,sub

  对于复杂的正则式,可以用repr()来查看原始字符串

  另外,如果需要替换所有标点,python的写法也有些不一样

re.sub(r'[{}]+'.format(string.punctuation),'', name)

  java里可以这样写

name.replaceAll("[\\pP‘’“”]", "");

  对于不确定的编码,使用chardet来猜测编码方式也不失为一种选择

def autoTransformEncoding(x):
    if(x == None or x == ''):
        return ''
    defaultEncoding = sys.getdefaultencoding()
    infoencode = chardet.detect(x).get('encoding', defaultEncoding)
    if(infoencode == None):
        infoencode = defaultEncoding
    return x.decode(infoencode,'ignore').encode('utf-8')

抱歉!评论已关闭.