• 关于Python正则表达式的问题


     

     代码

    #! /usr/bin/env python
    #
    coding=utf-8
    import re
    str
    =r'<docitem key="founded_place"><![CDATA[中国 广东 深圳]]></docitem>'
    r
    =re.compile(r'<docitem key="(.*)">(.*)</docitem>')
    = r.match(str)

    print m.group(0)
    print m.group(1)
    print m.group(2)

    print '==========================================='

    str2
    =m.group(2)
    str2
    =str
    print str2
    r2
    =re.compile(r".*<!\[CDATA\[(.*?)]]>")
    m2 
    = r2.match(str2)
    print m2.group(1)

    <docitem key="founded_place"><![CDATA[中国 广东 深圳]]></docitem>

    founded_place
    <![CDATA[中国 广东 深圳]]>
    ===========================================
    <docitem key="founded_place"><![CDATA[中国 广东 深圳]]></docitem>
    中国 广东 深圳

    这里有和perl正则表达式不同的地方 ,如果在perl中,模式串为(r"<![CDATA[(.*?)]]>")即可,但是在Python中,前面必须加上".*",才能正常使用,还有"["必须加反斜线转义。最终如下式所示:

    (r".*<!\[CDATA\[(.*?)]]>")

    另外一个问题是Python对于编码问题处理的不是很好,很多时候不同编码的字符需要改变编码方式

    #! /usr/bin/env python

    #coding=utf-8

    import sys

    reload(sys)

    sys.setdefaultencoding('gbk')

    import re

    pchinese=re.compile(ur'([\u4e00-\u9fa5]+)+?',re.U)

    s=u'12345测试用字符串67890,45这是另一个44哈'

    m=pchinese.findall(s)

    if m:

        print( '|'.join(m))

    else:

        print( 'no found!')

    #! /usr/bin/env python

    #coding=utf-8

    #! /usr/bin/env python

    #coding=utf-8

    import re

    import sys

    reload(sys)

    sys.setdefaultencoding('gbk')


    str1=r'<docitem key="founded_place"><![CDATA[中国 广东 深圳]]></docitem>'

    #str1=r" CDATA[中国 广东 深圳]"

    #str1=unicode(str1, 'utf8')

    print type(str1)


    re2=r".*CDATA\[(.*?)\]"

    #re2=unicode(re2, 'utf8')

    #print type(re2)


    r= re.compile(re2)        #[\u4e00-\u9fa5]

    m = r.match(str1)


    print m.group(0)

    print m.group(1) 

  • 相关阅读:
    Qt MFC 混合编程的问题
    DECLARE_MESSAGE_MAP用法
    DECLARE_DYNCREATE与DECLARE_DYNAMIC区别
    Qt unsigned char* (uchar*) 转为QImage
    C++ SafeArrayAccessData,SafeArrayUnaccessData使用
    C++ 实现 COM → IUnknown → 接口
    C++ COM编程之IUnknown接口
    C++ COM三大接口:IUnknown、IClassFactory、IDispatch。
    C++ COM组件QueryInterface函数
    C++ COM组件的AddRef和Release()方法使用
  • 原文地址:https://www.cnblogs.com/xuxm2007/p/1823507.html
Copyright © 2020-2023  润新知