我想使用正则表达式从文本中获取价格。
小例子: “这个伟大的产品今天仅售1.000,59欧元!”
我想从上面的文字中得到价格。到目前为止,这是我的python正则表达式:
re.findall(ur'([0-9,.]*)', text)
只有一个小问题。有些文本使用逗号(,)来分割小数,其他文本使用点(。),其中一些甚至没有小数或用短划线( - )替换00小数,如€59, -
所以理想的情况是,(在我看来)获得所有价格没有任何问题:
如果两者都为NO:删除所有点和逗号。 如果两个问题中的一个是YES:如果小数点用点(。)分隔,用逗号替换该点,或者如果它已经是逗号,就这样保留它。并删除其余的逗号和点。
正则表达式可以吗?
答案 0 :(得分:2)
编辑:
抱歉,我没有仔细阅读问题描述。我认为要解决这个问题,你需要两个正则表达式模式。首先执行re.sub()
然后re.findall()
pattern = re.compile(r'(([.,]{1})(\d{1,3}|-))')
s = "2,456,777.00 xxxxxxxxxxxxx 59,789,- xxxxxxxxxxxx 59,- xxxxxxxxxx 1.000,59"
def subs(m):
g0 = m.group(0)
g3 = m.group(3)
if g3 == '-':
g3 = '00'
if len(g0) == 4:
return ',' + g0[1:4]
else:
return '.' + g3
c = re.findall(r'[\d.,-]+', re.sub(pattern, subs, s))
print c
>> ['2,456,777.00', '59,789.00', '59.00', '1,000.59']
确实有点麻烦。希望有人能想出一个更聪明的人。