【发布时间】:2017-03-19 08:41:00
【问题描述】:
问题
背景:
我有一个包含大约 10,000 个列表的列表,其中包含需要转换为特定格式的不规则数据。这些数据将在转换后被摄取到 pandas 数据帧中。
TL/DR;如何优雅地转换列表中以下正则表达式的匹配字符串?
正则表达式 '\d{1,3}-\d{1,3},\d{1,3}-\d{1,3}'
示例: '1-3,6-8' 到 '1 2 3 6 7 8'
当前解决方案: 使用列表推导需要多种类型转换来转换字符串,并且不适合作为持久的解决方案。
pat = re.compile('\d{1,3}-\d{1,3},\d{1,3}-\d{1,3}')
row = ['sss-www,ddd-eee', '1-3,6-8', 'XXXX', '0-2,3-7','234','1,5']
lst = [((str(list(range(int(x.split(',')[0].split('-')[0]),
int(x.split(','[0].split('-')[1])+1))).strip('[]').replace(',', '')+' '
+str(list(range(int(x.split(',')[1].split('-')[0]),
int(x.split(',')[1].split('-')[1]) + 1))).strip('[]').replace(',', '')))
if pat.match(str(x)) else x for x in row]
结果
['sss-www,ddd-eee', '1 2 3 6 7 8', 'XXXX', '0 1 2 3 4 5 6 7', '234', '1,5']
【问题讨论】:
-
您熟悉正则表达式捕获组吗?不用
split -
把它分解成更小的问题。你问错了问题,实际上根本不需要正则表达式来做到这一点。
-
Bryan,我对它们并不十分熟悉,但我想我已经阅读了足够多的内容来了解如何在不使用 split() 的情况下处理它
-
jonrsharpe,我正在使用正则表达式来识别处理不规则数据的情况。没有正则表达式如何识别案例?
标签: python python-3.x pandas python-3.5