吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1045|回复: 9
收起左侧

[求助] Python 正则表达式分组的问题

  [复制链接]
thepoy 发表于 2021-10-1 09:46
本帖最后由 thepoy 于 2021-10-1 13:04 编辑
s = '农业部、工信部、科技部关于xxx的通知'
re.findall(r'(?:(?=^|、)(.+?))+关于.+', s)
# ['、科技部']

我想提取出来“关于”前的所有部门,但写的正则表达式只能提取出挨着“关于”的那个部门。
正则表达式要在“关于”前面有“、”的字符串中提取信息。

知道问题所在了,python 捕获组只能匹配最后一个,+对捕获组没什么用,算是 python 的特色了。
split 的方法请不要再回答,我用的本就是 split 方法来绕过正则。
但我在此提问就是想知道如何用正则来完美解决这个问题。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

okakaxio 发表于 2021-10-1 10:02


import re
s = '农业部、工信部、科技部关于xxx的通知'
str = re.findall(r'(.*?)关于', s)
words = str[0].split("、")
words

# ['农业部', '工信部', '科技部']
平淡最真 发表于 2021-10-1 10:03
yep96 发表于 2021-10-1 10:04
不会匹配多个的正则,但功能的话可以用下面的来实现
[Python] 纯文本查看 复制代码
lis = re.findall(r'(.+)关于.+', s)
lis = [x.split('、') for x in lis]
平淡最真 发表于 2021-10-1 10:05
未测试
只有一行文本,方法比较多
fanvalen 发表于 2021-10-1 10:44
为啥要那么复杂的规则
直接取一个关键字部
>>> re.findall("[\u4e00-\u9fa5]+部",s)
['农业部', '工信部', '科技部']
当然你要连在一起的
>>> re.findall("\S+部",s)
['农业部、工信部、科技部']
 楼主| thepoy 发表于 2021-10-1 10:48
fanvalen 发表于 2021-10-1 10:44
为啥要那么复杂的规则
直接取一个关键字部
>>> re.findall("[%u4e00-%u9fa5]+部",s)

不是所有的部门都有“部”这个字,只能用顿号和“关于”作为提取关键字。
平淡最真 发表于 2021-10-1 13:39
thepoy 发表于 2021-10-1 10:48
不是所有的部门都有“部”这个字,只能用顿号和“关于”作为提取关键字。

3楼测试了不行吗?
那个不就用关于和顿号作为提取关键字吗?
埋身欲搏 发表于 2021-10-1 17:06
import re
s1 = '地震局、国务院、环保厅、工信部、应急管理局、科技处、白宫、国会、内阁关于xxx的通知'
res = re.findall('([\u4e00-\u9fa5]*)(、|关于)',s1)
for a in res:
    print(a[0])

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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