Python 正则表达式分组的问题
本帖最后由 thepoy 于 2021-10-1 13:04 编辑```python
s = '农业部、工信部、科技部关于xxx的通知'
re.findall(r'(?:(?=^|、)(.+?))+关于.+', s)
# ['、科技部']
```
我想提取出来“关于”前的所有部门,但写的正则表达式只能提取出挨着“关于”的那个部门。
正则表达式要在“关于”前面有“、”的字符串中提取信息。
知道问题所在了,python 捕获组只能匹配最后一个,+对捕获组没什么用,算是 python 的特色了。
split 的方法请不要再回答,我用的本就是 split 方法来绕过正则。
但我在此提问就是想知道如何用正则来完美解决这个问题。
import re
s = '农业部、工信部、科技部关于xxx的通知'
str = re.findall(r'(.*?)关于', s)
words = str[0].split("、")
words
# ['农业部', '工信部', '科技部']
([\u4e00-\u9fa5]*?)[、|关于] 不会匹配多个的正则,但功能的话可以用下面的来实现
lis = re.findall(r'(.+)关于.+', s)
lis = 未测试
只有一行文本,方法比较多 为啥要那么复杂的规则
直接取一个关键字部
>>> re.findall("[\u4e00-\u9fa5]+部",s)
['农业部', '工信部', '科技部']
当然你要连在一起的
>>> re.findall("\S+部",s)
['农业部、工信部、科技部'] fanvalen 发表于 2021-10-1 10:44
为啥要那么复杂的规则
直接取一个关键字部
>>> re.findall("[%u4e00-%u9fa5]+部",s)
不是所有的部门都有“部”这个字,只能用顿号和“关于”作为提取关键字。 thepoy 发表于 2021-10-1 10:48
不是所有的部门都有“部”这个字,只能用顿号和“关于”作为提取关键字。
3楼测试了不行吗?
那个不就用关于和顿号作为提取关键字吗?
import re
s1 = '地震局、国务院、环保厅、工信部、应急管理局、科技处、白宫、国会、内阁关于xxx的通知'
res = re.findall('([\u4e00-\u9fa5]*)(、|关于)',s1)
for a in res:
print(a)
页:
[1]