关于Python正则表达式的问题
2010-09-10 17:40
531 查看
代码
#! /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>中国 广东 深圳
这里有和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)
#! /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>中国 广东 深圳
这里有和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中正则表达式的反斜杠问题
- 关于Python正则表达式 findall函数问题详解
- 关于Python正则表达式的区分大小写的问题
- python 正则表达式反向引用的问题
- java中关于正则表达式反斜杠问题http:\....
- python中关于正则表达式三
- boost中关于正则表达式在vs2008不能匹配中文的问题
- 业务需要,得到了两段正则表达式的代码,JAVASCRIPT的(关于车牌号码的校验问题)。
- 总结一下python正则表达式中的变量使用问题
- 关于VIM 正则的问题,MLGB CTMD vim 正则表达式中 + * 这些是要有\转义,但是[] {} 是不用转义的。
- python中关于正则表达式四
- 关于 regcomp()、regexec() 正则表达式的问题
- 转:关于脏字典过滤问题-用正则表达式来过滤脏数据
- 关于正则表达式中去掉重复字符的问题
- Python中正则表达式对中文的匹配问题
- python学习笔记(一)——关于正则表达式的学习小结
- [python]关于字符串查找和re正则表达式的效率对比
- 关于正则表达式,关于Python的re模块
- python关于多线程正则爬取邮件地址造成大量回溯CPU爆满,界面卡顿的问题
- 关于在input标签中输入数字的问题(正则表达式)