【问题求助】findall函数使用re.S时,待匹配项字节数超过30所造成的差异

一、源代码

import re
exp = '一'+r'[\u4e00-\u9fa5]*?'+'事情'
pattern = re.compile(exp)
c = '一一期去的事情一事情,作些怪的事情,作到不一样的事情,例如制作些玩一物事情作些事情'
print(pattern.findall(c, re.S))
# ['一样的事情', '一物事情']

1.有re.S输出的结果

['一样的事情', '一物事情']

2.无re.S输出的结果

['一一期去的事情', '一事情', '一样的事情', '一物事情']

二.目标项前的字符串长度对结果产生了影响

当第一个目标项前不超过15个汉字(30个字节)时

import re
exp = '一'+r'[\u4e00-\u9fa5]*?'+'事情'
c = '二三四五六七八九十二三四五六七一些事情'
print(re.compile(exp).findall(c, re.S))
# []

当第一个目标项前超过15个汉字(30个字节)时

import re
exp = '一'+r'[\u4e00-\u9fa5]*?'+'事情'
c = '二三四五六七八九十二三四五六七八一些事情'
print(re.compile(exp).findall(c, re.S))
# ['一些事情'] 

三、问题

1.对于不含有换行符的字符串,为什么加上“re.S”后会对findall函数匹配的结果产生影响?

2.为什么目标项前的字符串长度会影响匹配结果?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值