我在一些数据中读取一个项目列表,空格分隔。每个项目都有一个名称,可以是一个或多个单词,也可以是一个整数或一小部分整数。
实施例
'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']
这里正确的正则表达式是什么?
答案 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)