【问题标题】:Large scope regex for quantity and prices in finance金融中数量和价格的大范围正则表达式
【发布时间】:2019-03-15 17:22:54
【问题描述】:

我正在对大量财务数据进行一些数据挖掘,我需要找出两个匹配的 python 正则表达式:

价格,例如:

16 666 666.67
16 666 666,67
666 666.67
5 567.1
5 677,1
0.0
0,101
5,4
5.40
54.0
5.675674754747457
5980990.009345
16,000.45
234,234,657.108

价格中总是有一个昏迷或一个点。但逗号前可能有空格(空格需要保持一致,而不是像56 34.345 例如)

体积(数量),如:

9898
5
450934
5,000
1,000
1,000,000
5,998
11
0
5 000
1 000 000
1 980 000 000
599
233 590
23 613
181 876 980

数量永远不会用点分隔。基本不能有小数。

这是我试过的价格: (^[0-9]{0,}$)|(\d{1,}(?:[.,]\d{3})*(?:[.,]\d*)) 但我无法处理空格。

对于音量,我觉得很复杂,因为到处都有空格!

非常感谢。

【问题讨论】:

  • 你的“期望”输出是什么?
  • 在您尝试匹配表达式的字符串中这些数字周围是否有一些上下文,或者您是否像在示例中一样获得数字?如果周围有更多的东西,那么很高兴知道能提供帮助。
  • @FailSafe 一个布尔值是可以的,捕获的整个体积或数量更好,你可以!
  • @TheKvist 可能有(或粘在一起的东西,是的
  • 在价格中,有些是逗号小数分隔符,有些是数字分隔符吗?

标签: python regex price product-quantity


【解决方案1】:

在这种情况下,我推荐的不仅仅是正则表达式。

首先,规范化每一行是好的,因为有很多可接受的格式。我们将进行规范化,使. 始终是小数分隔符, 始终是千位分隔符:

if '.' not in line:
    # `,` is our separator, so replace with `.`
    line = line.replace(',', '.')
else:
    # `.` is our separator, so replace `,` with ` ` (does nothing if already space separated).
    line = line.replace(',', ' ')

现在,我们可以将正则表达式应用于line

^\d{1,3}(\s\d{3})*\.\d+$ 将匹配以千分隔的任何内容。 ^\d+\.\d+$ 将匹配任何没有分隔数千的内容。

请注意,由于我们对行进行了一些预处理,因此我们的正则表达式更简单。我将保留数量一(应该更容易)并将适当的部分留给您。

我还建议捕获整个字符串,然后在其上调用 .replace(' ', '') 以去除空格,而不是尝试在正则表达式中去除它们。

【讨论】:

  • 我将使用您建议的方法并尝试返回一个不错的功能。谢谢
  • 当然,让我知道它是否有效(如果有效,请接受此答案)。
  • 当然,给我一些时间试试吧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多