如何使用python正则表达式提取具有可变内容的数据?

时间:2013-04-13 04:05:15

标签: python regex

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

  

20,000股,每股550美元

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

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

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

然而,这种方法使我失败,因为股票数量(在这种情况下,2万)变化以及价格值。有没有更好的方法来提取这些数据?

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

2 个答案:

答案 0 :(得分:1)

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

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

此外,如果你想坚持使用.*来匹配值,最好通过将其变为.*?来减少它的贪婪,这样它就不会吃掉其余的输入。

如果输入可以eachper share结尾,请改为使用以下内容:

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

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

答案 1 :(得分: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)