Python re.findall中正则表达式(.*?)和参数re.S使用

目录

一、re.findall函数介绍

二、代码如下

三、re.findall中正则表达式(.*?)

四、re.findall中参数re.S的意义

五、运行结果


关于正则表达式的用法,可参看:剑指 Offer 20. 表示数值的字符串,里面有更加具体的例子~


一、re.findall函数介绍

它在re.py中有定义:

def findall(pattern, string, flags=0):
    """Return a list of all non-overlapping matches in the string.

    If one or more capturing groups are present in the pattern, return
    a list of groups; this will be a list of tuples if the pattern
    has more than one group.

    Empty matches are included in the result."""
    return _compile(pattern, flags).findall(string)

返回string中所有与pattern匹配的全部字符串,返回形式为数组。


二、代码如下

后面会讲解代码里的各个部分,先列出来~

import re

str = 'aabbabaabbaa'
#一个"."就是匹配除 \n (换行符)以外的任意一个字符
print(re.findall(r'a.b',str))#['aab', 'aab']
#*前面的字符出现0次或以上
print(re.findall(r'a*b',str))#['aab', 'b', 'ab', 'aab', 'b']
#贪婪,匹配从.*前面为开始到后面为结束的所有内容
print(re.findall(r'a.*b',str))#['aabbabaabb']
#非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
#非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
print(re.findall(r'a(.*?)b',str))#['a', '', 'a']

str = '''aabbab
         aabbaa
         bb'''#后面多加了2个b
#没有把最后一个换行的aab算进来
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
#re.S不会对\n进行中断
print(re.findall(r'a.*?b',str,re.S))#['aab', 'ab', 'aab', 'aa\n         b']

三、re.findall中正则表达式(.*?)

字符串是

str = 'aabbabaabbaa'

1.一个 就 是匹配除 \n (换行符)以外的任意一个字符

print(re.findall(r'a.b',str))
['aab', 'aab']

2.* 前面的字符出现0次或以上

print(re.findall(r'a*b',str))
['aab', 'b', 'ab', 'aab', 'b']

3..* 贪婪,匹配从.*前面为开始到后面为结束的所有内容

print(re.findall(r'a.*b',str))
['aabbabaabb']

4..*? 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果中间没有字符也会被截取

print(re.findall(r'a.*?b',str))
['aab', 'ab', 'aab']

5.(.*?) 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容

print(re.findall(r'a(.*?)b',str))
['a', '', 'a']

四、re.findall中参数re.S的意义

1.字符串变为(后面多加了2个b)

str = '''aabbab
         aabbaa
         bb'''

2.参数无re.S,没有把最后一个换行的aab算进来

print(re.findall(r'a.*?b',str))
['aab', 'ab', 'aab']

3.参数有re.S,不会对\n进行中断

print(re.findall(r'a.*?b',str,re.S))
['aab', 'ab', 'aab', 'aa\n         b']

五、运行结果 

Python,`.group()`是一个字符串的方法,用于匹配正则表达式并返回匹配到的子字符串。 首先,您需要导入`re`模块,它是Python用于处理正则表达式的内置模块。然后,您可以使用正则表达式的`search()`或`match()`方法来执行匹配操作。 下面是一个示例代码,演示如何使用`.group()`方法: ```python import re # 定义正则表达式 pattern = r'(\d{3})-(\d{4})-(\d{4})' # 创建一个匹配对象 match_obj = re.search(pattern, '电话号码是:123-4567-8901') if match_obj: # 使用.group()方法获取匹配到的子字符串 full_match = match_obj.group() # 完整匹配的字符串 area_code = match_obj.group(1) # 第1个括号内的子字符串 middle_nums = match_obj.group(2) # 第2个括号内的子字符串 last_nums = match_obj.group(3) # 第3个括号内的子字符串 print('完整匹配:', full_match) print('区号:', area_code) print('间数字:', middle_nums) print('最后四位数字:', last_nums) ``` 在上面的示例,我们定义了一个正则表达式`(\d{3})-(\d{4})-(\d{4})`,用于匹配电话号码的格式。然后,我们使用`re.search()`方法在给定的字符串查找匹配项,并将匹配对象存储在`match_obj`变量。最后,我们使用`.group()`方法获取匹配到的子字符串,并打印输出。 请注意,`.group()`方法可选地接受一个整数参数n,用于指定要获取的子字符串的索引。索引从1开始,代表正则表达式的第n个括号内的子字符串。如果没有提供参数,则`.group()`方法返回完整匹配的字符串。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老兵安帕赫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值