从数字用$符号分隔的字符串中分隔数字?

时间:2014-09-29 14:11:21

标签: python regex

我已经输了一个字符串,其中数字将以逗号结尾,该程序如下所示:

import re 
s = 'natraj 12 dozen $100.25, camlin 10 box $1250.50,' 
lis = re.split('\s*\$\s*|\s*\,\s*', s)[:-1] 
print(lis)
description = lis[0::2] 
amount = lis[1::2] 
print(description) 
print(amount) 

输出:

description = ['natraj 12 dozen','camlin 10 box'] and
amount = ['100.25',1250.50']

amount列表不应包含$ sign)

现在我想要与上面相同的输出:但现在输入字符串包含逗号

s = 'natraj 12 dozen $100.25 camlin 10 box $1250.50' 

3 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一目标。一些:

  1. 剥离标点符号
  2. 使逗号可选(我最喜欢的)
  3. 手动解析,抓取[0-9] + \。[0-9] {2}
  4. 的群集

    根据您的示例,上面的数字2非常简单..只需将?(之前的RE子句可选)添加到逗号:

    lis=re.split('\s*\$\s*|\s*\,?\s*', s)[:-1] 
    

答案 1 :(得分:0)

您可以尝试以下正则表达式来分隔数字和描述部分,

(?P<Numbers>\$\d+(?:\.\d+)?,)|(?P<Description>\w+(?: \w+)*)

DEMO

如果您不想要,请从捕获的群组中删除逗号。

(?P<Numbers>\$\d+(?:\.\d+)?)|(?P<Description>\w+(?: \w+)*)

DEMO

答案 2 :(得分:0)

尝试将字符串的字符放在列表中,然后使用.delete函数从列表中删除逗号,并在输出中返回列表。希望这会有所帮助。:) \

    list_of_s = [s]
    list_of_s.delete(',')