fledgling 发表于 2022-5-19 22:10:26

re模块中的findall用法和search用法

为什么findall用法只能匹配姓,不能匹配到名字?而search方法能匹配到名字?
print(re.findall(r'(王|李)\w{1,2}','李时珍王羲之李世民'))
print(re.search(r'(王|李)\w{1,2}','李时珍王羲之李世民').group())

Twilight6 发表于 2022-5-19 22:14:35


参考代码:

print(re.findall(r'[王李]\w{1,2}','李时珍王羲之李世民'))

fledgling 发表于 2022-5-19 22:58:00

Twilight6 发表于 2022-5-19 22:14
参考代码:

我是想试试分组的用法,用小括号没办法把名字都显示出来吗?

hrpzcf 发表于 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())

Twilight6 发表于 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}','李时珍王羲之李世民'))

页: [1]
查看完整版本: re模块中的findall用法和search用法