Python正则匹配字母大小写不敏感在读xml中的应用

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

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

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

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

1 import re
2
3 s = ‘Abc‘
4 p = ‘abc‘
5 p = re.compile(p,re.I)
6 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)如下:

1 <root>
2     <element  name = ‘who‘  /element1>
3     <element  Name = ‘am‘  /element1>
4     <element  NAME = ‘I‘  /element1>
5 </root>

解析的代码如下:

 1 import re
 2 import xml.etree.Element as etree
 3
 4 file = ‘abc.xml‘
 5 p = ‘name‘
 6 pattern = re.compile(p,re.I)
 7 tree = etree.parse(file)
 8 root = tree.getroot()
 9 result = []
10 result = tree.findall(‘.//element‘)
11 for i in result:
12     for j in i.attrib.keys():
13         try:
14             r = re.search(pattern,j).group()
15             #输出匹配的name属性名和对应的属性值
16             print ‘attrib is %s,and the value is %s\n‘%r%i.attrib[r]
17             break
18         except AttributeError,e:
19             pass
20             

输出的结果如下:

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

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

时间: 2025-01-10 03:02:16

Python正则匹配字母大小写不敏感在读xml中的应用的相关文章

利用Python正则匹配中文——爬取校园网公告栏中感兴趣的内容

写这个程序是因为校园网公告栏时不时会有学术报告,讲座之类的信息发布,但这类信息往往发布在讲座的前一天,以至于丢失很多重要消息.同时公告栏里也会发布一些跟学生无关的内容,比如工会主席会议啥的. 主要遇到的困难时对中文的正则匹配问题.(比如通过第一次正则可以提取到一个页面内的所有中文标题,第二次正则从这些中文标题中将能匹配上“报告”两个字的对象添加到结果list内) 学校公告页面是gb2312编码.我使用的方式是,整个工程使用utf-8编码,将需要匹配的关键字转换成utf-8编码格式,使用正则匹配u

Python – 正则匹配

用正则切分字符串输出 ['info','xiaoZhang','33','shandong'].s="info:xiaoZhang33shandong", import re s="info:xiaoZhang 33 shandong" res = re.split(r":| ", s) # |表示或,根据冒号或者空格切分 print(res) ['info', 'xiaoZhang', '33', 'shandong'] 正则匹配以163.co

python 正则匹配的re.search 例子

一个简单的使用re.search 匹配一个字符串中的关键字 [[email protected] ~]# vim ceshi.py #!/usr/bin/env python #coding:utf-8 import re err=("stderr: 'Permission denied (publickey) fatal: Could not read from remote repository") matchpro = re.search( r'Permission denied

Python正则匹配之有名分组

参考:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html # re.match import re m = re.match(r'(\w+) (?P<sign>.*)', 'hello standby!') print(type(m)) # <class '_sre.SRE_Match'> print(m) # <_sre.SRE_Match object; span=(0, 14), match='hell

Python正则匹配递归获得给出目录下的特定类型的文件小技巧

需求是酱的: 输入一个目录,这个目录包含检测目录的必备信息但不准确需要获得后加工一下,如给出目录:C:\Program Files\Common Files\DESIGNER,需要检测的目录是:C:\Program Files\Common Files\System,即从给出的目录中获取前面的信息,后面的补上的目录(System)是指定的.从E:\res\tmp目录中检测xml文件,返回xml文件的目录 代码如下: 1 import os 2 import re 3 pathlist = []

python正则匹配示例

text="山东省临沂市兰山区 市委大院中区21号楼4单元 276002 奥特曼1号 18254998111" #匹配手机号 m=re.findall(r"1\d{10}",text) if m: print(m) #匹配电话号 pattern = re.compile(r"((\d{3}|\(\d{3}\)|\d{4}|\(\d{4}\))?(\s|-|.)?(\d{8}))") a = re.match(pattern, text) if a

python正则匹配

两种方法 : 1 str='价格 ¥ 198.00' mode = re.compile(r'(([0-9]+)(.[0-9]{1,2})?)')print mode.findall(str)[0][0] 2 tmp=re.search(r'(([0-9]+)(.[0-9]{1,2})?)',str).group()结果都是198.00

python 正则匹配手机号

import rephone = str(input('请输入手机号:'))# b = str(12345678912)t = re.compile(r'^1(3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8[0-9]|9[0-9])\d{8}$')s = re.search(t,phone)# print(s)if s: print(s.group(),'是正常手机号')else: print('手机号格式不正确') 原文地址:https://www.cnblogs.

day6 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问