0

我正在对大量财务数据进行一些数据挖掘,我需要找出两个匹配的 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*)) 但我无法处理空格。

对于体积,对我来说非常复杂,因为到处都有空格!

太感谢了。

4

1 回答 1

2

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

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

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(' ', '')它来去除空格,而不是试图在正则表达式中去除它们。

于 2019-03-15T17:51:16.960 回答