首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python提取具有可变内容的数据?

如何使用python提取具有可变内容的数据?
EN

Stack Overflow用户
提问于 2013-04-13 04:05:14
回答 2查看 161关注 0票数 1

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

20,000股,每人550美元

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

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

代码语言:javascript
复制
value = re.findall(re.compile('20,000 shares for (.*) USD each'), data)

然而,这种方法失败了,因为股票的数量(在本例中是2万股)的变化以及价格的变化。有更好的方法来提取这些数据吗?

对我的问题的不恰当描述,我事先表示歉意;我是Python的新手,我不知道在这个场景中使用什么技术术语。如果有更好的方式,我的标题,请随时编辑,并感谢您提前!

EN

回答 2

Stack Overflow用户

发布于 2013-04-13 04:07:51

您可以使用更一般的模式,如:

代码语言:javascript
复制
([\d,.]+) shares for ([\d,.]+) USD each

另外,如果您想坚持使用.*来匹配值,最好通过将它转换为.*?来减少它的贪婪,这样它就不会占用您输入的其余部分。

如果输入可以以eachper share结尾,请使用以下方法:

代码语言:javascript
复制
([\d,.]+) shares(?: of stock)? at ([\d,.]+) USD (?:each|per share)

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

票数 1
EN

Stack Overflow用户

发布于 2013-04-13 04:29:26

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

代码语言:javascript
复制
(\d[\d,.]*) shares for ([\d,.]+) USD each

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

如果您可能在多个数据集上使用相同的正则表达式,则应该将其与在findall中使用的正则表达式分别编译。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15984103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档