python中re模块的函数_Python中re模块函数使⽤介绍Python中通过re模块实现了正则表达式的功能。re模块提供了⼀些根据正则表达式进⾏查、替换、分隔字符串的函数。本⽂主要介绍re 模块中常⽤的函数和函数常⽤场景。
re模块常⽤函数
1、match(pattern,string,flags=0)
根据pattern从string的头部开始匹配字符串,只返回第1次匹配成功的对象,否则,返回None。flags表⽰规则选项。
>>> importre>>> Str=‘Python:Java:C‘
java中split的用法>>> re.match(r‘Python‘,Str) #匹配成功
>>> Str=‘Java:Python:C‘
>>> re.match(r‘Python‘,Str) #匹配失败
>>>
2、search(pattern,string,flags=0)
根据pattern在string中匹配字符串,只返回第1次匹配成功的对象,否则,返回None。
>>> importre>>> Str=‘Python:Java:C‘
>>> re.search(r‘Python‘,Str) #匹配成功
>>> Str=‘Java:Python:C‘
>>> re.search(r‘Python‘,Str) #同样匹配成功
3、split(pattern,string,maxsplit=0)
根据pattern分隔string,maxsplit表⽰最⼤分隔数。
>>> importre>>> Str=‘Python:Java:C‘
>>> re.split(r‘:‘,Str) #指定分隔符:
[‘Python‘, ‘Java‘, ‘C‘]>>> Str=‘Python:Java:C‘
>>> re.split(r‘:‘,Str,1) #指定最⼤分割次数
[‘Python‘, ‘Java:C‘]>>> Str = "Python:Java:Shell|C++|Ruby"
>>> re.split(r‘[:|]‘,Str) #指定多种分隔符
[‘Python‘, ‘Java‘, ‘Shell‘, ‘C++‘, ‘Ruby‘]
4、compile(pattern,flags=0)
编译正则表达式pattern,返回⼀个pattern对象。
>>> importre>>> regex = r‘Python‘
>>> Str=‘Python:Java:C‘
>>> p =repile(regex)>>>p.match(Str)<_sre.sre_match object at>
说明:pattern对象⽅法除了match(),还包括search()、findall()、finditer()。
5、sub(pattern,repl,string,count=0)
根据指定的正则表达式,替换字符串中的⼦串。pattern是⼀个正则表达式,repl是⽤于替换的字符串,string是源字符串,如果count为0,则返回string中匹配的所有结果。如果count>0,则返回前count个匹配结果。
>>> importre>>> Str=‘Python:Java:C‘
>>> re.sub(r‘P.*n‘,‘Ruby‘,Str)‘Ruby:Java:C‘
>>> print Str #不改变原字符串
Python:Java:C
6、subn(pattern,repl,string,count=0)
作⽤和sub()相同,返回⼀个⼆元元组。第⼀个元素是替换结果,第2个元素是替换的次数。
>>> importre>>> Str=‘Python:Java:C‘
>>> re.subn(r‘P.*:‘,‘Ruby:‘,Str) #返回替换次数
(‘Ruby:C‘, 1)>>> re.subn(r‘P.*?:‘,‘Ruby:‘,Str) #注意匹配中多了个?号,替换内容不同了
(‘Ruby:Java:C‘, 1)>>>
说明:匹配条件中‘P.*?:‘有⽆问号?号是有区别的。不加?号是贪婪匹配。
7、findall(pattern,string,flags=0)
根据pattern在string中匹配字符串。如果匹配成功,返回包含匹配结果的列表,否则,返回空列表。但pattern中有分组时,返回包含多个元组的列表,每个元组对应⼀个分组。
>>> importre>>> regex = r‘\w+‘ #\w表⽰匹配包括下划线的任何单词字符
>>> Str=‘Python:Java:C‘
>>> p =repile(regex)>>>p.findall(Str)
[‘Python‘, ‘Java‘, ‘C‘]
描述完re模块的主要函数后,这⾥再强调 函数中的flags参数 和 repile() 函数。
1、re.flags参数
通过查看re模块函数的原型可以发现,函数参数⼏乎都有flags参数,该参数⽤于设置匹配的附加选项。例如,是否忽略⼤⼩写、是否⽀持多⾏匹配等。常⽤的re模块规则选项如下所⽰:
I或IGNORECASE 忽略⼤⼩写
L或LOCALE 字符集本地化,⽤于多语⾔环境
M或MULTILINE 多⾏匹配
S或DOTALL 使.匹配包括\n在内的所有字符
X或VERBOSE 忽略正则表达式中的空⽩、换⾏,⽅便添加注释
U或UNICODE \w、\W、\b、\B、\d、\D、\s和\S都将使⽤Unicode
通过⼀个忽略⼤⼩写的实例看下⽤法:
>>> importre>>> Str=‘Python:Java:C‘
>>> re.match(r‘python‘,Str) #匹配失败
>>> re.match(r‘python‘,Str,re.I) #加re.I,匹配成功
2、repile() 函数
正则表达式的解析⾮常耗时,如果多次使⽤findall()的⽅式匹配字符串搜索效率可能⽐较低。如果多次使⽤同⼀规则匹配字符串,可以使⽤compile()进⾏预编译,compile函数返回1个pattern对象。该对象拥有⼀系列⽅法⽤于查、替换或扩展字符串,从⽽提供字符串的匹配速度。patter对象的属性和⽅法如下
pattern #获取当前使⽤的正则表达式
match(string,flags=0) #同re.match()
search(string,flags=0) #同re.searc()
findall(string,flags=0) #查所有符合pattern对象匹配条件的结果,返回1个包含匹配结果的列表。
finditer(string,flags=0) #返回⼀个包含匹配结果的地址
另外,函数compile()通常与match()、search()、group()⼀起使⽤对含有分组的正则表达式进⾏解析。正则表达式的分组从左往右开始计数,第1个出现的圆括号标记为第1组,依次类推。此外还有0号组,0号组⽤于存储匹配整个正则表达式的结果。match()和search()将返回⼀个match对象,match对象提供了⼀系列的⽅法和属性来管理匹配的结果。match对象的⽅法和属性如下:
group(index=0) #某个分组的匹配结果。默认匹配整个正则表达式
groups() #所有分组的匹配结果,每个分组的结果组成1个列表返回
举例,匹配⾝份证号码并获取⾝份证中的年、⽉、⽇信息。
>>> regex = r‘[1-9][0-9]{5}(\d{4})(\d{2})(\d{2})[0-9]{3}[0-9X]‘
>>> Str = ‘110100************‘
>>> p =repile(regex)>>> m =p.match(Str)>>&ups()
(‘1995‘, ‘08‘, ‘07‘)>>> m.group(1)‘1995‘
>>> m.group(2)‘08‘
>>> m.group(3)‘07‘
典型实例
1、多关键字任⼀匹配查
>>> importre>>> regex = r‘Python|Java|C‘
>>> Str1 = ‘Hello Java‘
>>> Str2 = ‘Python Developer‘
>>> p =repile(regex)>>>p.findall(Str1)
[‘Java‘]>>>p.findall(Str2)
[‘Python‘]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论