Doublo 发表于 2020-10-26 19:53

Python正则表达式 循环捕获所有书名

请教各位大佬,在Python下想捕获下面的所有书名:

1023《带货》《古希腊》《威士忌原来是这么回事儿》《古希腊史》等

我是这么写的:\d+((《.+?》))+

返回的是:分组1:《古希腊史》
                  分组2:《古希腊史》
返回的都是最后一个

想要的是:分组1:《带货》
                  分组2:《古希腊》
                  分组3:《威士忌原来是这么回事儿》
                  分组4:《古希腊史》

初学,实在搞不清,先谢谢各位大佬了

hhtkey 发表于 2020-10-26 19:56

要用数组提取打印啊

ciker_li 发表于 2020-10-26 19:57

看源码调试

rsnodame 发表于 2020-10-26 20:23

你想得太复杂了{:301_992:}

import re
ss = '1023《带货》《古希腊》《威士忌原来是这么回事儿》《古希腊史》等'
ptn = r'《.+?》'
r = re.findall(ptn,ss)
# r == ['《带货》', '《古希腊》', '《威士忌原来是这么回事儿》', '《古希腊史》']

积木工具箱 发表于 2020-10-26 20:35

现在很多正则工具,调试好了再上代码

Doublo 发表于 2020-10-27 12:47

rsnodame 发表于 2020-10-26 20:23
你想得太复杂了

import re


用捕获组是因为文档里面还有大批量其他带书名号的地方,而这个数字开头带书名号的这一行才是我需要的,谢谢你了:lol

Doublo 发表于 2020-10-27 12:54

积木工具箱 发表于 2020-10-26 20:35
现在很多正则工具,调试好了再上代码

在regex101调试的,这个网站可以把匹配到的捕获组也显示出来,问题就是调试不出来我想要的效果

wanwfy 发表于 2020-10-28 05:47



import re
str = '1023《带货》《古希腊》《威士忌原来是这么回事儿》《古希腊史》等'

pattern = re.compile('《(.*?)》')

pattern.findall(str)

rsnodame 发表于 2020-10-28 08:42

Doublo 发表于 2020-10-27 12:47
用捕获组是因为文档里面还有大批量其他带书名号的地方,而这个数字开头带书名号的这一行才是我需要的,谢 ...

那你试试删掉一层()。你的pattern用了两层括号

Doublo 发表于 2020-10-28 15:49

rsnodame 发表于 2020-10-28 08:42
那你试试删掉一层()。你的pattern用了两层括号

删一层只能捕获最后一次匹配,多重循环捕获提示可以加一层括号实现,但是2次捕获都是最后一次,查了一下,别人说python实现补了
页: [1] 2
查看完整版本: Python正则表达式 循环捕获所有书名