我在试着建立一个市场分析工具。原始数据输入的格式如下:
20,000股,每人550美元
意思是"20,000股,每股550美元“。
通常,我会用以下代码获取价格:
value = re.findall(re.compile('20,000 shares for (.*) USD each'), data)然而,这种方法失败了,因为股票的数量(在本例中是2万股)的变化以及价格的变化。有更好的方法来提取这些数据吗?
对我的问题的不恰当描述,我事先表示歉意;我是Python的新手,我不知道在这个场景中使用什么技术术语。如果有更好的方式,我的标题,请随时编辑,并感谢您提前!
发布于 2013-04-13 04:07:51
您可以使用更一般的模式,如:
([\d,.]+) shares for ([\d,.]+) USD each另外,如果您想坚持使用.*来匹配值,最好通过将它转换为.*?来减少它的贪婪,这样它就不会占用您输入的其余部分。
如果输入可以以each或per share结尾,请使用以下方法:
([\d,.]+) shares(?: of stock)? at ([\d,.]+) USD (?:each|per share)将?:放在开括号后,使其成为一个不匹配的组,因此它不会与您感兴趣的数字一起捕获。
发布于 2013-04-13 04:29:26
使用字符类在正则表达式中指定股票编号和股价。
(\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)https://stackoverflow.com/questions/15984103
复制相似问题