python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...

3c6cea752e26a4a6f4798129dde28a32.png

前言

使用正则表达式进行匹配,可以直接调用模块级函数,如match()、search()、findall()等,函数第一个参数是匹配的正则表达式,第二个参数则为要匹配的字符串。也可以使用re.compile()先将正则表达式编译成RegexObject对象,然后再调用RegexObject对象的方法,参数为要匹配的字符串。例如:

re.search(r'flash', 'Flash_WorkingNotes', re.I).group()

355ff4cc3914ec9bc1df23e19ac74604.png

等价于

p = re.compile(r'flash', re.I)
p.search('Flash_WorkingNotes').group()

0221abc44c572aafe48eaeec36a4b376.png

如果匹配的正则表达式只用一次,模块级函数使用起来很方便;若项目中包含多个正则表达式或者一个正则表达式被多次使用,编译成RegexObject对象更方便一些。以下内容,先编译成正则表达式对象,然后再调用这些对象的方法。

5.2.3 RegexObject的方法和MatchObject的方法

re模块提供了一个正则表达式引擎接口,可以将正则表达式编译成对象并用它们进行匹配。使用re.compile()将正则表达式编译成RegexObject对象,有对象就有方法可以调用,RegexObject对象常用方法有match()、search()、findall()、finditer()、split()、sub()以及subn()。

match()和search()匹配成功的话返回一个MatchObject实例,findall()、split()、sub()以及subn()返回一个列表,finditer()返回一个迭代器。

197c4fb26844fdcfd9eaa418bc375fbd.png

2f3cb80294e5fd13e6a032c4388a2e94.png
  • match()函数
    match()函数检查RE是否在字符串开始处匹配,match()函数只返回一次成功的匹配,从0开始,如果不是从0匹配成功,返回None。如果匹配成功,返回一个MatchObject 对象,可以通过group方法获取匹配成功的整个字符串。

1 匹配成功

p = re.compile('Flash', re.I)
p.match('flash workingnotes')

ef631999ab0a73073e2a8a7a4f069261.png

匹配成功的话,返回一个MatchObject对象,可以调用MatchObject的方法。

2 使用group()函数返回匹配成功的整个字符串

p = re.compile('Flash', re.I)
p.match('flash workingnotes').group()

954ac9502bf3061954eefc49fb81e9bb.png

3 使用start()返回匹配开始的位置

p = re.compile('Flash', re.I)
p.match('flash workingnotes').start()

54a710445d7327db63a7e2ae80be8ec9.png

4 使用end()返回匹配结束的位置

p = re.compile('Flash', re.I)
p.match('flash workingnotes').end()

ad6d613cd212d8d8c8d09b6e1b080114.png

5 使用span()返回一个元组包含匹配(开始,结束)的位置

p = re.compile('Flash', re.I)
p.match('flash workingnotes').span()

2035a8a6474217f6f55e40c0325d4746.png

6 匹配失败

p = re.compile('Flash', re.I)
print(p.match('workingnotes flash'))

72a16a399370c4e52c70a7c34a7ec90d.png
  • search()函数

search()函数检查整个字符串,匹配成功,返回一个匹配对象MatchObject,没有匹配成功返回None

1 匹配成功

p = re.compile('Flash', re.I)
print(p.search('workingnotes flash'))

26d112d208511dc3eca0a56685565551.png

2 使用group()函数返回匹配成功的整个字符串

p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').group())

1d56a49694f4af8c46a74b3f1d6f2ed3.png

3 使用start()返回匹配开始的位置

p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').start())

dbb04fd0fabf82960c65b43f2d39ac0b.png

4 使用end()返回匹配结束的位置

p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').end())

da15713f9f2cbc1a403db91888722f39.png

5 使用span()返回一个元组包含匹配(开始,结束)的位置

p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').span())

e34c3509209e4df5239f91061e29f85e.png

6 匹配失败

p = re.compile('Flash', re.I)
print(p.search('workingnotes fash'))

76b78ee8aecc510afc0627355b489d69.png
  • findall()函数

findall()函数找到匹配成功的所有子串,并把它们作为一个列表返回,若没有匹配成功,返回空列表

1 匹配成功

p = re.compile('Flash', re.I)
print(p.findall('flash workingnotes Flash Workingnotes'))

e4b5d0f38fbcfefe9f99917a47fda382.png

编译正则表达式的时候,使用标志re.I,匹配时候不区分大小写,所以成功匹配flash和Flash。

2 匹配失败

p = re.compile('Flash', re.I)
print(p.findall('flah workingnotes Flah Workingnotes'))

462ceebbb03a99c61b1f2275de0ee398.png
  • finditer()函数

finditer()函数找到匹配成功的所有子串,并把它们作为一个迭代器返回

p = re.compile('Flash', re.I)
print(p.finditer('flash workingnotes Flash Workingnotes'))

65bcb2545308f89f9f882a699b3e02ae.png
p = re.compile('Flash', re.I)
p1 = p.finditer('flash workingnotes Flash Workingnotes')
for match in p1:
print(match.group())

115707e08fcb5edfd8d1d4c64f8be7aa.png
  • split()函数

split()函数基于正则表达式的模式分隔字符串,通过参数max指定最大分割数。

如果找不到匹配的字符串的话,不进行分割。

1 使用非字母数字字符分割字符串

p = re.compile(r'W+')
p.split('Flash,Workingnotes.flash+Workings FlashWorkingnotes')

ccca2bedc806f8991f740db3424cf2e5.png

2 使用非字母数字字符分割字符串,限制最大分割次数为2

p = re.compile(r'W+')
p.split('Flash,Workingnotes.flash+Workings FlashWorkingnotes', 2)

7512c33a7bf2b18f82cfd7b1cc20f254.png

3 匹配不到

p = re.compile(r'd')
p.split('Flash,Workingnotes.flash+Workings FlashWorkingnotes', 2)

4d18e3cdf123085adacb1bc1f8c0e717.png
  • sub()函数和subn()函数
    sub()函数和subn()函数用于搜索和替换,sub()函数找到匹配成功的所有子串,并将其用一个不同的字符串替换;subn()函数找到匹配成功的所有子串,并将其用一个不同的字符串替换,并且返回新的字符串和替换次数的元组。参数count可用于指定最大替换的次数。

1 使用gmy替换F(f)lash

p = re.compile(r'Flash', re.I)
p.sub('gmy', ('flash workingnotes Flash Workingnotes'))

b704cbbe4190e4ba2d63478f0e24c655.png

2 使用gmy替换F(f)lash,替换次数为1次

p = re.compile(r'Flash', re.I)
p.sub('gmy', ('flash workingnotes Flash Workingnotes'), 1)

1b4a3d529fff37ef60a2467293203fcc.png

3 subn()函数与sub()函数一样,返回的是包含新字符串和替换执行次数的元组

p = re.compile(r'Flash', re.I)
p.subn('gmy', ('flash workingnotes Flash Workingnotes'))

496502ae1e6527a0361b324158828623.png
p = re.compile(r'Flash', re.I)
p.subn('gmy', ('flash workingnotes Flash Workingnotes'),1)

67596049de72c8b5c8f7b1bf9549d645.png

6 总结

用了三部分介绍了Python之正则表达式re模块,这里只是抛砖引玉,选择性的介绍部分内容,没有介绍的可以参考https://docs.python.org/zh-cn/3/library/re.html。按照计划,后面进入到可视化内容的介绍。


关于作者:从事风控方面工作,数据科学爱好者,微信公众号WorkingNotes,欢迎交流。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部