我正在尝试构建市场分析工具。原始数据输入的格式如下:
20,000股,每股550美元
意思是“每股550美元的20,000股股票”。
通常情况下,我会用以下代码来获取价格:
value = re.findall(re.compile('20,000 shares for (.*) USD each'), data)
然而,这种方法使我失败,因为股票数量(在这种情况下,2万)变化以及价格值。有没有更好的方法来提取这些数据?
我提前为我的问题描述不当而道歉;我是Python的新手,我不确定在这种情况下使用什么技术术语。如果有更好的方式来标题,请随时编辑,并提前感谢您!
答案 0 :(得分:1)
您可以使用更常规的模式,例如:
([\d,.]+) shares for ([\d,.]+) USD each
此外,如果你想坚持使用.*
来匹配值,最好通过将其变为.*?
来减少它的贪婪,这样它就不会吃掉其余的输入。
如果输入可以each
或per 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)