首页 技术 正文
技术 2022年11月15日
0 收藏 485 点赞 2,484 浏览 1431 个字

需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配?

问题出现之前是使用字符串比较的方式,比如要匹配’abc’,则用语句:

 if s == 'abc':#s为需要匹配的字符串
print '匹配成功\n'

现在的问题是s可能是Abc、ABC等等,所以需要大小写不敏感的匹配,如果把需要匹配的模式的大小写进行罗列,那即使是三个字母的短模式也是很麻烦,查了一下,正则表达式re模块中有个参数flags=re.I,这样就可以大小写不敏感的匹配了,示例如下:

 import re s = 'Abc'
p = 'abc'
p = re.compile(p,re.I)
print re.search(p,s).group()

匹配成功,输出结果:’Abc’

Re模块中compile函数的使用 :

预编译在python正则匹配中不是必须的,但是最好预编译一下,提升效率(多次使用,及时存缓存,也节省了查缓存等时间)。Re模块中的flag参数值可选范围如下表:

(可查文档re模块)

标志

含义

DOTALL, S

使 . 匹配包括换行在内的所有字符

IGNORECASE, I

使匹配对大小写不敏感

LOCALE, L

做本地化识别(locale-aware)匹配

MULTILINE, M

多行匹配,影响 ^ 和 $

VERBOSE, X

能够使用 REs 的 verbose 状态,使之被组织得更清晰易懂

这个表中Flags参数的值对search函数直接用也是可以的,如re.searchi(pattern,string,flags)

下一个问题,如何匹配大小写不确定的xml元素中的属性名呢:

既然可以不敏感的匹配字母的大小写,那么如果要匹配xml元素节点,要获取该节点的值怎么做呢?

思路是这样的:要获取属性值,则要得到属性名,但是怎么准确知道属性名哪个字母大写哪个字母小写呢,这是个问题

方法是利用元素tag找到所在元素,然后取出元素的所有属性名,挨个匹配,找出所需的就停止,这样匹配元素属性名成功后,re.search(p,s,f).group()就是该属性当前的名了

需要解析的xml文件(abc.xml)如下:

 <root>
<element name = 'who' /element1>
<element Name = 'am' /element1>
<element NAME = 'I' /element1>
</root>

解析的代码如下:

 import re
import xml.etree.Element as etree file = 'abc.xml'
p = 'name'
pattern = re.compile(p,re.I)
tree = etree.parse(file)
root = tree.getroot()
result = []
result = tree.findall('.//element')
for i in result:
for j in i.attrib.keys():
try:
r = re.search(pattern,j).group()
#输出匹配的name属性名和对应的属性值
print 'attrib is %s,and the value is %s\n'%r%i.attrib[r]
break
except AttributeError,e:
pass

输出的结果如下:

 attrib is name,and the value is who
attrib is Name,and the value is am
attrib is NAME,and the value is I

最后记录下:Str.Strip()参数为空可以去掉字符串首尾的特殊字符,很好用~

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,103
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,579
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,427
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,199
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,834
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,917