代碼
#! /usr/bin/env python
#coding=utf-8
import re
str=r'<docitem key="founded_place"><![CDATA[中國 廣東 深圳]]></docitem>'
r=re.compile(r'<docitem key="(.*)">(.*)</docitem>')
m = 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>中國 廣東 深圳
這裡有和perlRegex不同的地方 ,如果在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)