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

问题出现之前是使用字符串比较的方式,比如要匹配'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正则匹配字母大小写不敏感在读xml中的应用的更多相关文章

  1. 用python处理时间、utf8文本、正则匹配、序列化、目录路径搜索、xml解析

    python 处理时间 import time import re now = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) ...

  2. python 正则匹配中文(unicode)(转)

    由于 需求原因,需要匹配 提取中文,大量google下,并没有我需要的.花了一个小时大概测试,此utf8中文通过,特留文.    参考: http://hi.baidu.com/nivrrex/blo ...

  3. python正则匹配——中文字符的匹配

    # -*- coding:utf-8 -*- import re '''python 3.5版本 正则匹配中文,固定形式:\u4E00-\u9FA5 ''' words = 'study in 山海大 ...

  4. python 正则匹配

    正则表达式模式 模式字符串使用特殊的语法来表示一个正则表达式: 字母和数字表示他们自身.一个正则表达式模式中的字母和数字匹配同样的字符串. 多数字母和数字前加一个反斜杠时会拥有不同的含义. 标点符号只 ...

  5. python 正则之字母匹配

    \A:匹配字符串的开始   \b:匹配一个单词边界   取出a边界单词的个数 >>> len(re.findall(r"\ba"," ab abc ad ...

  6. Python正则匹配多行,多个数据

    最近用Python做一个crawler工具的时候,发现用一个正则表达式可以匹配到个数据的时候用match.group()只能打印出第一个数据,其它数据不能打印出来.最后找到解决方法,现在记录一下,直接 ...

  7. Python 正则匹配网页内的IP地址及端口号

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-30 20:38:23 # @Author : EnderZhou (z ...

  8. python正则匹配示例

    text="山东省临沂市兰山区 市委大院中区21号楼4单元 276002 奥特曼1号 18254998111" #匹配手机号 m=re.findall(r"1\d{10} ...

  9. [Python]正则匹配字符串 | 蒲公英二维码图片url

    代码示例: import re def Find(string): # findall() 查找匹配正则表达式的字符串 url = re.findall('http[s]?://(?:[a-zA-Z] ...

随机推荐

  1. ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

    ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()   今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...

  2. IOS 客户端测试入门.pdf

    IOS 客户端测试入门  http://www.open-open.com/doc/view/42d1257bf67946f595e843bfdbdfeabf

  3. UIApplication详解再解-备

    每个app有且只有一个UIApplication对象,当程序启动的时候通过调用UIApplicationMain方法得到的.可以通过sharedApplication方法得到. UIApplicati ...

  4. 配置TC2.0运行环境

    一. 学习过程 下载TC2.0并打开如图: 这是一个集成的C语言环境包,包括TC.dosbox和一些编译工具,很明显这样我无法判断单个程序的功能,也无法区分哪些程序是必须的. 那么为了搞清楚哪些文件是 ...

  5. cf B. Petya and Staircases

    http://codeforces.com/contest/362/problem/B 先排序,然后判断第一个和最后一个是不是脏的,如果是则输出NO,然后判断其中三个脏的是不是连着的,如果是也输出NO ...

  6. Codeforces 158E Phone Talks

    http://codeforces.com/contest/158/problem/E 题目大意: 麦克是个名人每天都要接n电话,每通电话给出打来的时间和持续时间,麦克可以选择接或不接,但是只能不接k ...

  7. 浅谈单片机、ARM和DSP的异同

    犹记得当年读书的时候,老师说单片机.ARM.DSP有互通之处,都是CPU,但听老师讲都听不懂. 我该如何理解他们,并找出他们的异同呢?我们来看看行内人的看法: ICer,从事ARM CPU的SOC设计 ...

  8. FreeBSd ports 安装软件

    1.ports的目录在/usr/ports2.POSTS安装软件有时可能这个包已经安装过了,会有提示,无法 继续安装.能够用提示中的参数:#make install clean FORCE_PKG_R ...

  9. (转)iPhone 判断UITableView 滚动到底部

    UITableView is a subclass of UIScrollView, and UITableViewDelegate conforms to UIScrollViewDelegate. ...

  10. Perl 多线程模块 Parallel::ForkManager

    Perl 多线程模块 Parallel::ForkManager 一个简单的并行处理模块.这个是用来对付循环的多线程处理. 放在循环前面. Table of Contents 1 Synops内容简介 ...