Python 3正则表达式拆分项目列表?

时间:2017-12-05 00:40:28

标签: python regex python-3.x

我在一些数据中读取一个项目列表,空格分隔。每个项目都有一个名称,可以是一个或多个单词,也可以是一个整数或一小部分整数。

实施例

'12 Spruce Log 4/5 Water 3 Orange 3/18 Oak Plank'

我希望将此拆分为以下列表:

['12 Spruce Log', '4/5 Water', '3 Orange', '3/18 Oak Plank']

这是我的Python正则表达式:

import re
re.findall(r'\d+(/\d+)?\D+', "12 Spruce Log 4/5 Water 3 Orange 3/18 Oak Plank")

这会产生以下结果,显然不对:

['', '/5', '', '/18']

这里正确的正则表达式是什么?

2 个答案:

答案 0 :(得分:3)

你可以试试这个:

import re
s = '12 Spruce Log 4/5 Water 3 Orange 3/18 Oak Plank'
new_s = re.split('(?<=[a-zA-Z])\s(?=\d)', s)

输出:

['12 Spruce Log', '4/5 Water', '3 Orange', '3/18 Oak Plank']

或者,只使用re.findall

new_list = [i[:-1] if i.endswith(' ') else i for i in re.findall('[\d\/]+\s[a-zA-Z\s]+(?=\d)|[\d\/]+\s[a-zA-Z\s]+(?=$)', s)]

输出:

['12 Spruce Log', '4/5 Water', '3 Orange', '3/18 Oak Plank']

答案 1 :(得分:0)

所以我想出了这个:

/(?:\d+\/\d+|\d+)\s(?:[[:word:]]+\s*){1,2}(?=\d|$)/g

demo on regex101.com