将数字与由$符号分隔的字符串分隔吗?

问题描述:

我已经采取了字符串,其中数字将用逗号,结束程序如下图所示:

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列表不应包含$符号)

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

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

您是否尝试过修改正则表达式而不需要逗号? – jonrsharpe 2014-09-29 14:12:47

+1

所以你想分离出所有的价格?这里你想要的输出是什么? – thegrinner 2014-09-29 14:13:05

+1

您的预期产出是? – 2014-09-29 14:13:12

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

  1. 地带标点符号
  2. 使逗号可选的(我的最爱)
  3. 解析手动,敛的[0-9] + \ [0-9] {2}
簇。上述

2号是很容易给你的例子..只需添加?(以前RE条款可选)以逗号:

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

感谢你的时间和精力保罗.....但是你的代码导致输出为:['natraj' ,'打','camlin','box']和另一个列表为['12',100.25,10]我想要的是:第一个列表为..... ['natraj 12打','camlin 10 box '],第二个列表为['100.25','1250.50'] – 2014-09-29 14:23:45

+0

只需将非货币标记组合到字符串中,并将货币标记组合到列表中。您应该可以通过前面的“$”轻松找到它。想想看,你可以分割空间并遍历令牌 - 不需要正则表达式。 – PaulProgrammer 2014-09-29 14:38:37

+0

yup @PaulProgrammer ....我会尝试 – 2014-09-29 14:44:47

你可以牛逼RY下面的正则表达式来单独编号和说明部分,

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

DEMO

从捕获组中删除逗号,如果你不想要它。

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

DEMO

+0

avinash ji请....... python code ..... ur接近解决方案...但给我的python代码...即时通讯愚蠢在正则表达式 – 2014-09-29 14:27:43

+0

ji我试着ji ... – 2014-09-29 14:31:17

+0

在此先感谢@avinashraj – 2014-09-29 14:37:33

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

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