在处理正字符串的时候,经常会有一些复杂规则的字符串需求,
正则表表达式就是描述这些规则的公工具。
换句话说。
正则表达式就是记录文本规则的代码。
上期咱们一起学习了正则表达式re模块提供的match()方法
为什么要学正则表达式 - 5
和search()方法
为什么要学正则表达式 - 6
今天我们来看看re模块提供的另一个findall()方法对字符串的操作和在python中实际开发的应用。
使用search()方法匹配字符串
search()方法用于在整个字符串搜索所有符合正则表达式的字符串,并且以列表的形式返回。如果匹配成功。则返回包含匹配结果的列表,否则则返回空列表。
它的语法格式如下:
re.findall(pattern, strings, [flags])
Hot
summer
参数:
pattern:表示模式字符串,由要匹配的正则表达式数转换而来.。
strings:表示需要匹配的字符串。
flags:选择参数,用于控制匹配方式。如是否区分字母大小写等。
咱们来看一组例子:
我们搜索以s开头的字符串,分别打印出不区分大小写和区分大小写的列表
pattern = r'S\w+' #匹配字符串规则
string = 'Sixty school students seeing surprising sun snow scream, shout simultaneously' #要进行匹配的字符串
match_obj = re.findall(pattern, string, re.I) #按照不区分大小写的方式进行匹配
print(match_obj)
#['Sixty', 'school', 'students', 'seeing', 'surprising', 'sun', 'snow', 'scream', 'shout', 'simultaneously']
string = r'学生Sixty school students seeing surprising sun snow scream, shout simultaneously'
match_obj = re.findall(pattern, string) #按照区分大小写的方式进行匹配
print(match_obj)
#['Sixty']
注意
如果在指定的模式字符串中,包含分组。则返回与分组匹配的的文本列表。
请看下例:
pattren = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'
str = '127.0.0.1 192.16.8.66'
match_obj = re.findall(pattren, str)
print(match_obj)
#['.1', '.66']
从匹配的结果可以看出没有得到我们想要匹配的结果,而是匹配到了'(\.[0-9{1,3}])'的结果。
这是因为在模式字符串中出现了分组!
如果想要获取整个模式字符串中的匹配,需要将整个模式字符串使用一对小括号进行分组,这样在获取到正常的结果。
pattren = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
str = '127.0.0.1 192.16.8.66'
match_obj = re.findall(pattren, str)
print(match_obj)
#[('127.0.0.1', '.1'), ('192.16.8.66', '.66')]
好了今天的分享就到此了,这两天内容很少很简单,主要是为了让我们可以更好地理解,明天咱们继续干正则表达式!
—END— 历史消息Python 3.8 官网文档(中文版附下载)
Python爬虫常用的三大库之Request
为什么要学正则表达式 - 1
网友评论