设为首页 加入收藏

TOP

Python正则表达式与re模块介绍(三)
2019-05-23 14:33:46 】 浏览:185
Tags:Python 正则 表达式 模块 介绍
_sre.SRE_Match object at 0x00000000055F9BE8>
>>> re.match(r'(abc)ee\1','abceeabd') #match不匹配,则返回None。
>>>


(5)(?P=name) 使用别名为name的分组匹配到的字符串。通常与(?P<name>...)结合使用。用法同\<number>。假设表达式为(?P<Year>\d{4})(?P=Year)。则匹配20172017,不匹配20172018。


>>> mat = re.search(r'(?P<Year>\d{4})(?P=Year)','20172017') #匹配,输出
>>> mat.group()
'20172017'
>>> mat.group(1)
'2017'
>>> re.search(r'(?P<Year>\d{4})(?P=Year)','20172018') #不匹配,返回None
>>>


字符串前r的含义


字符串前r表示不转义,使用真实字符。举例如下:


>>> str = "Hello\tWorld"
>>> print str
Hello  World
>>> str = r"Hello\tWorld"
>>> print str
Hello\tWorld


re模块常用函数


1、match(pattern,string,flags=0)


根据pattern从string的头部开始匹配字符串,只返回第1次匹配成功的对象,否则,返回None。flags表示规则选项。


>>> import re
>>> Str='Python:Java:C'
>>> re.match(r'Python',Str) #匹配成功
<_sre.SRE_Match object at 0x0000000005C5FCC8>
>>> Str='Java:Python:C'
>>> re.match(r'Python',Str) #匹配失败
>>>


2、search(pattern,string,flags=0)


根据pattern在string中匹配字符串,只返回第1次匹配成功的对象,否则,返回None。


>>> import re
>>> Str='Python:Java:C'
>>> re.search(r'Python',Str) #匹配成功
<_sre.SRE_Match object at 0x00000000060D7D98>
>>> Str='Java:Python:C'
>>> re.search(r'Python',Str) #同样匹配成功
<_sre.SRE_Match object at 0x0000000005C5FCC8>


3、split(pattern,string,maxsplit=0)


根据pattern分隔string,maxsplit表示最大分隔数。


>>> import re
>>> 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对象。


>>> import re
>>> regex = r'Python'
>>> Str='Python:Java:C'
>>> p = re.compile(regex)
>>> p.match(Str)
<_sre.SRE_Match object at 0x00000000060D7D98>


说明:pattern对象方法除了match(),还包括search()、findall()、finditer()。


5、sub(pattern,repl,string,count=0)


根据指定的正则表达式,替换字符串中的子串。pattern是一个正则表达式,repl是用于替换的字符串,string是源字符串,如果count为0,则返回string中匹配的所有结果。如果count>0,则返回前count个匹配结果。


>>> import re
>>> 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个元素是替换的次数。


>>> import re
>>> 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中有分组时,返回包含多个元组的列表,每个元组对应一个分组。


>>> import re
>>> regex = r'\w+' #\w表示匹配包括下划线的任何单词字符
>>> Str='Python:Java:C'
>>> p = re.compile(regex)
>>> p.findall(Str)
['Python', 'Java', 'C']


描述完re模块的主要函数后,这里再强调 函数中的flags参数 和 re.compile() 函数。


1、re.flags参数


  通过查看re

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言实现三个数从小到大排序/输出 下一篇Python调用外部系统命令

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目