重新组织一个字符串。从文本中分割数字

时间:2015-08-03 08:56:31

标签: string python-3.x digits

在抓取我从Beautifulsoup的get_text()收到的网站时:

protein  30 %, crude fibres  2.6 %, fat content  15 %, crude ash  7.7 %, Vitamin E  180 mg/kg, omega-3 fatty acids  1.5 %, omega-6 fatty acids  1.4 %

目的是让csv看起来像:

protein ; 30%
crude fibres ; 2,6%
fat content ; 15 %
...
omega-6 fatty acids ; 1,4%

但我需要保留我的报废逻辑。 这就是为什么我需要创建像pair_list=[name,quantity]

这样的pair_list=[protein,30%]

我如何创建这样的一对?

2 个答案:

答案 0 :(得分:1)

您可以在列表理解中使用re.split

>>> [re.split(r' (?=\d+)',i) for i in s.split(',')]
[['protein ', '30 %'], [' crude fibres ', '2.6 %'], [' fat content ', '15 %'], [' crude ash ', '7.7 %'], [' Vitamin E ', '180 mg/kg'], [' omega-3 fatty acids ', '1.5 %'], [' omega-6 fatty acids ', '1.4 %']]

正则表达式r' (?=\d+)'使用positive look-ahead,这会使re.split根据后跟数字的空格拆分正则表达式。

然后您可以将结果写入csv文件:

import csv
with open('my_file.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=',')
    spamwriter.writerows(list_result)

答案 1 :(得分:1)

假设你总是有两个空格分隔符:

>>> s = 'protein  30 %, crude fibres  2.6 %, fat content  15 %, crude ash  7.7 %, Vitamin E  180 mg/kg, omega-3 fatty acids  1.5 %, omega-6 fatty acids  1.4 %'
>>> [x.strip().split('  ') for x in s.split(',')]
[['protein', '30 %'], ['crude fibres', '2.6 %'], ['fat content', '15 %'], ['crude ash', '7.7 %'], ['Vitamin E', '180 mg/kg'], ['omega-3 fatty acids', '1.5 %'], ['omega-6 fatty acids', '1.4 %']]

>>> for x in _:
        print(x)

['protein', '30 %']
['crude fibres', '2.6 %']
['fat content', '15 %']
['crude ash', '7.7 %']
['Vitamin E', '180 mg/kg']
['omega-3 fatty acids', '1.5 %']
['omega-6 fatty acids', '1.4 %']