re模块中的findall用法和search用法
为什么findall用法只能匹配姓,不能匹配到名字?而search方法能匹配到名字?print(re.findall(r'(王|李)\w{1,2}','李时珍王羲之李世民'))
print(re.search(r'(王|李)\w{1,2}','李时珍王羲之李世民').group())
参考代码:
print(re.findall(r'[王李]\w{1,2}','李时珍王羲之李世民')) Twilight6 发表于 2022-5-19 22:14
参考代码:
我是想试试分组的用法,用小括号没办法把名字都显示出来吗? 本帖最后由 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())
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}','李时珍王羲之李世民'))
页:
[1]