python的正则匹配unicode

  最近用到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')




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值