关于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) 

 

你可能感兴趣的:(python)