阿小信大人的头像
Life is short (You need Python) Bruce Eckel

Python中re模块常用函数2014-09-02 04:33

##escape(string) 返回的字符创所有非字符数字字符都带有反斜杠。
>>> escape('http://ashin.sinaapp.com/blog')
'http\\:\\/\\/ashin\\.sinaapp\\.com\\/blog'
>>>


##findall(pattern, text [, flag]) 返回text中与pattern匹配的值,如果包含分组,将返回与分组匹配的文本列表,如果不止一个分组,那么列表中的每项都是一个元组。
>>> text='2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> findall(p, text)
['2012-07-08', '2010-06-06']
>>> p=compile(r'(\d+)-(\d+)-(\d+)')
>>> findall(p, text)
[('2012', '07', '08'), ('2010', '06', '06')]
>>> p=compile(r'(\d+)-\d+-\d+')
>>> findall(p, text)
['2012', '2010']
>>>


##finditer(pattern, string [, flag]) 与findall含义相同,但返回一个迭代对象。
>>> text='2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> finditer(p, text)
<callable-iterator object at 0x01AC2930>
>>> for i in finditer(p, text):
...   print i,
...
<_sre.SRE_Match object at 0x015A8C98> <_sre.SRE_Match object at 0x0151A988>
>>> for i in finditer(p, text):
...   print i.group(),
...
2012-07-08 2010-06-06
>>>
>>> p=compile(r'(\d+)-(\d+)-(\d+)')
>>> for i in finditer(p, text):
...   print i.group(),
...
2012-07-08 2010-06-06
>>> for i in finditer(p, text):
...   print i.group(1),
...
2012 2010
>>>


##match(pattern, string [, flag]) 检查string“开头”是否与pattern匹配。不匹配返回None。
>>> text='2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> match(p, text)
<_sre.SRE_Match object at 0x015A8C98>
>>> text='today 2012-07-08 ashin is learning python 2010-06-06'
>>> match(p, text)
>>>


##search(pattern, string [, flag]) 在string中搜索pattern的“第一个”匹配值。
>>> text='today 2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> search(p, text).group()
'2012-07-08'
>>>


##split(pattern, string [, maxsplit - 0]) 根据pattern出现的位置拆分string。maxsplit默认执行所有可能的拆分,maxsplit为最高拆分次数。 
>>> text='today 2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> split(p, text)
['today ', ' ashin is learning python ', '']
>>> p=compile(r' ')
>>> split(p, text)
['today', '2012-07-08', 'ashin', 'is', 'learning', 'python', '2010-06-06']
>>>


##sub(pattern, rep1, string [, count = 0]) 使用rep1替换string中最左侧的、未重叠的pattern的出现位置,rep1也可以是函数
>>> text='today 2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> sub(p, 'miss u', text)
'today miss u ashin is learning python miss u'
>>>


##subn(pattern, rep1, string [, count = 0]) 与sub相同,但返回一个元组,保航新字符串和替换次数。
>>> subn(p, 'miss u', text)
('today miss u ashin is learning python miss u', 2)
>>>


>>> text='today 2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'\d+-\d+-\d+')
>>> s=search(p, text)
>>> s.start()
6
>>> s.end()                          #返回与一个分组匹配的字符串的开始和结束字符的索引值
16
>>> s.span()                         #返回元组形式的范围
(6, 16)
>>> s.pos                            #传递的pos值
0
>>> s.endpos                         #传递的endpos值
52
>>> s.lastgroup                      #返回匹配的最后一个分组的名称,最后一个没有名称返回None
>>> s.re                             #返回这则表达式对象
<_sre.SRE_Pattern object at 0x01524BA0>
>>> s.string                         #返回传递的字符串
'today 2012-07-08 ashin is learning python 2010-06-06'
>>> p=compile(r'(?P<year>\d+)-\d+-\d+')
>>> s=search(p, text)
>>> s.groupdict()                    #返回一个字典,其中包含分组名称和匹配值
{'year': '2012'}
>>> s.expand('\g<year>')             #替换对应分组内容
'2012'
>>> s.expand('\g<1>')
'2012'
>>> p=compile(r'(?P<year>\d+)-(\d+)-(\d+)')
>>> s=search(p, text)
>>> s.groups()                       #返回一个元组,其中包含与模式中所有分组匹配的文本
('2012', '07', '08')
>>> s.group()                        #返回匹配值的一个或多个子分组,加参数可指定分组编号或名称
'2012-07-08'
>>> s.lastindex                      #返回最后一个分组索引
3

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#   #regex
分享到:
阅读[1094] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论