python 正则表达式findall和search用法

  python自带了正则表达式的模块,使用这个模块可以非常方便地通过正则表达式提取有规律的信息;

 

1.使用findall函数

findall的函数原型:

re.findall(pattern,string,flags=0)

pattern 表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志(例如:忽略大小写,忽略换行符)常省略

步骤:

import re
content = "我的微博账户是: 1234567,QQ 密码是:33445566,银行卡密码是:888888,Gitthub密码是:999abc999,帮我记住他们"
comp = ":(.*?),"
comp_name="(我的.*?)\d"
passwd_list = re.findall(comp,content)
name_list = re.findall(comp_name,content)
account_passwd = re.search('账户是:(.*?),...密码是:(.*?),',content)
# print(passwd_list)
# print("我的密码分别是{}".format(passwd_list))
print(name_list)
# print(account_passwd)
# print(passwd_list)
# print(account_passwd.group())

 

2.search函数

search()的用法和findall()的用法一样,但是search()只会返回第一个满足要求的字符串.一旦找到符合要求的内容,它就会停止查找.

search()函数原型:

re.search(pattern,string,flags=0)  和findall()一样

对于结果,如果匹配成功,则是一个正则表达式的对象;如果没有匹配到的任何数据,就是None.如果需要得到匹配的结果,则需要通过.group()这个方法来获取里面的值.

 

小结:

findall()和search()函数的用法基本差不多;

区别:

1.findall()会把匹配到的结果全部展示出来,而往往我们编写程序的时候,需要对匹配的结果进行筛选,这个时候

search()搭配的group()功能就非常有用了;此时如果用的是findall()还需要另外设置程序从结果中筛选符合要求的.而用search()搭配group()就能准确地定位到目标.

 

2.另外用findall()和search()的匹配结果也有所不同,例如上面示例代码:

如果把参数:

'账户是:(.*?),...密码是:(.*?)传给findall pattern   得出的结果是:
[(' 1234567', '33445566')]

而用search()同样的参数,匹配的结果是这样的:
<re.Match object; span=(4, 33), match='账户是: 1234567,QQ 密码是:33445566,'>
调用group() print(account_passwd.group()) 则是:
"账户是: 1234567,QQ 密码是:33445566,""

我们很容易发现,findall()匹配的结果中,只体现了小括号()中要提取的内容,

而用search()会加上,我们设定在小括号()外的内容,因此当我们需要加入说明文字的时候,这个时候用search就显得非常的有优势了;

 

识记要点:

findalll() 把所匹配结果展示到列表中,提取内容不包括括号指定.

search()常与group()搭配使用,提取指定内容,括号外非指定的内容可一同展示.

 

posted @ 2021-05-10 11:19  另一个起点  阅读(2931)  评论(0编辑  收藏  举报