1

我正在尝试构建一个市场分析工具。原始数据输入的格式如下:

20,000 股,每股 550 美元

意思是“20,000 股股票,每股 550 美元”。

通常,我会使用以下代码来获取价格:

value = re.findall(re.compile('20,000 shares for (.*) USD each'), data)

但是,由于股票数量(在本例中为 20,000)以及价格价值发生变化,这种方法使我失败了。有没有更好的方法来提取这些数据?

对于我的问题描述不当,我提前道歉;我对 Python 有点陌生,我不确定在这种情况下使用什么技术术语。如果有更好的方式来表达我的标题,请随时编辑,并提前感谢您!

4

2 回答 2

1

您可以使用更通用的模式,例如:

([\d,.]+) shares for ([\d,.]+) USD each

此外,如果您想坚持.*匹配值,最好通过将其转换为使其不那么贪婪,.*?这样它就不会吃掉您输入的其余部分。

如果输入可以以任一结尾eachper share使用以下内容:

([\d,.]+) shares(?: of stock)? at ([\d,.]+) USD (?:each|per share)

放在左?:括号之后使其成为不匹配组,因此不会与您感兴趣的数字一起被捕获。

于 2013-04-13T04:07:51.310 回答
0

使用字符类在正则表达式中指定股票编号和股票价格。

(\d[\d,.]*) shares for ([\d,.]+) USD each

根据您的数据的样子,您可能不需要在捕获分隔符时那么小心。例如,如果只交易整股,则不需要第一个数字组中的小数点。

如果您可能在多个数据集上使用相同的正则表达式,那么您应该单独编译它而不是在 findall 中使用它。

import re
compiled_regex = re.compile("""(\d[\d,.]*) shares for ([\d,.]+) USD each""")

trades1 = re.findall(compiled_re, data1)
trades2 = re.findall(compiled_re, data2)
于 2013-04-13T04:29:26.577 回答