zoukankan      html  css  js  c++  java
  • python 正则匹配中文(unicode)(转)

       由于 需求原因,需要匹配 提取中文,大量google下,并没有我需要的。花了一个小时大概测试,此utf8中文通过,特留文。
       参考: http://hi.baidu.com/nivrrex/blog/item/e6ccaf511d0926888d543071.html
              http://topic.csdn.net/u/20070404/15/b011aa83-f9b7-43b3-bbff-bfe4f653df03.html

        首先,确保所有编码都为 unicode
             比如 str.decode('utf8') #从utf8文本中
                  u"啊l"  #在控制台输出中   
             (罗嗦下)本想使用参考一定编码 Hex 但郁闷的是 这每个字好像占2个位置,使用正则匹配无果。
        其次,确定中文范围 : [u4e00-u9fa5]
              (这里注意下 python 的re写的时候) 要  u"[u4e00-u9fa5]" #确定正则表达式也是 unicode 的
        demo :
       

    >>> print re.match(ur"[u4e00-u9fa5]+","")
    None
    >>> print re.match(ur"[u4e00-u9fa5]+",u"")
    <_sre.SRE_Match object at 0x2a98981308>


    >>> print re.match(ur"[u4e00-u9fa5]+",u"t")
    None


    >>> print tt
    现在才明白
    >>> tt
    'xe7x8exb0xe5x9cxa8xe6x89x8dxe6x98x8exe7x99xbd'
    >>> print re.match(r"[u4e00-u9fa5]",tt.decode('utf8'))
    None
    >>> print re.match(ur"[u4e00-u9fa5]",tt.decode('utf8'))
    <_sre.SRE_Match object at 0x2a955d9c60>


    >>> print re.match(ur".*["u4e00-"u9fa5]+",u"hi,匹配到了")
    <_sre.SRE_Match object at 0x2a955d9c60>
    >>> print re.match(ur".*["u4e00-"u9fa5]+",u"hi,no no")
    None

          



    其他 扩充 范围 (转)

    这里是几个主要非英文语系字符范围(google上找到的):
    2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
    3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。
    4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。
    A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。
    AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。
    F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。
    FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。
    比如需要匹配所有中日韩非符号字符
    ,那么正则表达式应该是^[u3400-u9FFF]+$
    理论上没错
    , 可是我到msn.co.ko随便复制了个韩文下来, 发现根本不对, 诡异
    再到msn.co.jp复制了个’お’
    , 也不得行..
    然后把范围扩大到^
    [u2E80-u9FFF]+$, 这样倒是都通过了, 这个应该就是匹配中日韩文字的正则表达式了, 包括我們臺灣省還在盲目使用的繁體中文
    而关于中文的正则表达式
    , 应该是^[u4E00-u9FFF]+$, 和论坛里常被人提起的^[u4E00-u9FA5]+$很接近
    需要注意的是论坛里说的^
    [u4E00-u9FA5]+$这是专门用于匹配简体中文的正则表达式, 实际上繁体字也在里面, 我用测试器测试了下’中華人民共和國’, 也通过了, 当然, ^[u4E00-u9FFF]+$也是一样的结果。


       

  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/mmix2009/p/3220427.html
Copyright © 2011-2022 走看看