鱼C论坛

 找回密码
 立即注册
查看: 1512|回复: 4

[已解决]re模块中的findall用法和search用法

[复制链接]
发表于 2022-5-19 22:10:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么findall用法只能匹配姓,不能匹配到名字?而search方法能匹配到名字?
print(re.findall(r'(王|李)\w{1,2}','李时珍  王羲之  李世民'))
print(re.search(r'(王|李)\w{1,2}','李时珍  王羲之  李世民').group())
最佳答案
2022-5-20 00:52:45
本帖最后由 hrpzcf 于 2022-5-20 00:53 编辑

group不带参数时默认是整个表达式匹配到的内容,而findall默认获取分组的内容,不是整个表达式匹配到的内容。
这样写就清晰了
import re

print(re.findall(r'(王|李)(\w{1,2})','李时珍  王羲之  李世民'))
print(re.search(r'(王|李)\w{1,2}','李时珍  王羲之  李世民').group())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-19 22:14:35 | 显示全部楼层

参考代码:
print(re.findall(r'[王李]\w{1,2}','李时珍  王羲之  李世民'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-19 22:58:00 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2022-5-19 22:14
参考代码:

我是想试试分组的用法,用小括号没办法把名字都显示出来吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 00:52:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2022-5-20 00:53 编辑

group不带参数时默认是整个表达式匹配到的内容,而findall默认获取分组的内容,不是整个表达式匹配到的内容。
这样写就清晰了
import re

print(re.findall(r'(王|李)(\w{1,2})','李时珍  王羲之  李世民'))
print(re.search(r'(王|李)\w{1,2}','李时珍  王羲之  李世民').group())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 08:57:54 | 显示全部楼层
fledgling 发表于 2022-5-19 22:58
我是想试试分组的用法,用小括号没办法把名字都显示出来吗?


单括号表捕获组, findall 匹配捕获时只保留捕获组内容,即括号内的,所以只保留了每个姓

search 仅捕获一次,.group() 方法不带参数,则调用会返回匹配那次所有匹配到的字符

你带上参数就会返回捕获组捕获到的内容,试试看 .group(1) ,返回的同样是姓

要捕获整个姓名,应该改成:
print(re.findall(r'王\w{1,2}|李\w{1,2}','李时珍  王羲之  李世民'))
# 或
print(re.findall(r'[王李]\w{1,2}','李时珍  王羲之  李世民'))

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 05:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表