- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
根据对与正则表达式相关的其他问题的回答,我认为我的机会很小。
我尝试解析不同表示形式的数字:
12345(234567)
12345(234.56K)
我无法从中控制源格式。
我想我可以为不同的格式想出不同的正则表达式。如何检测哪种格式是哪种?寻找字母“K”是否必须是蛮力方式?
最佳答案
这种事情通常是通过迭代一堆正则表达式并在找到匹配的表达式时停止来完成的——因为从字符串到数字的转换需要超出正则表达式能力的特殊解析。这意味着您需要以一种您知道会给出正确答案的方式来订购它们。在这种情况下,您可以这样做:
PARSERS = (
(re.compile(r'([0-9]+)\(([-+0-9.]+)[mM]\)'), 1000000),
(re.compile(r'([0-9]+)\(([-+0-9.]+)[kK]\)'), 1000),
(re.compile(r'([0-9]+)\(([-+0-9.]+)\)'), 1),
)
def parse(num):
for pattern, multiplier in PARSERS:
match = pattern.match(num)
if match is not None:
return float(match.group(1)), float(match.group(2)) * multiplier
raise ValueError("Failed to parse")
顺便说一句,这种模式在其他地方也很常见,比如决定 which function will handle a web request基于 URL。
只是为了好玩,这里有一个替代实现,它使用字典查找和单个正则表达式而不是迭代:
MULTIPLIER = {
'M': 1000000,
'K': 1000,
'': 1,
}
PATTERN = re.compile(r'(\d+)\(([-+.\d]+)([kKmM]?)\)')
def parse(num):
match = PATTERN.match(num)
if match is None:
raise ValueError("Failed to parse")
first, second, suffix = match.groups()
suffix = suffix.upper()
if suffix not in MULTIPLIER:
raise ValueError("Unrecognised multiplier %s" % suffix)
return float(first), float(second) * MULTIPLIER[suffix]
关于python - 财务数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37509081/
我尝试进行投资组合优化,但随后出现了TypeError: minimize_sharpe() missing 1 required positional argument: 'log_returns'
考虑到 future 的速度读取和存档的全局大小,存储报价数据(开盘价、最高价、最低价、收盘价、成交量)的最有效方法是什么? XML ? But It is resource consumption
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我正在尝试从 Yahoo! 检索市场数据财务和脚本多年来一直运行良好,但最近,它停止显示道琼斯数据。这是网址: http://download.finance.yahoo.com/d/quotes.c
因此,当我使用组合图表(条形图 + 折线图)时,我对以前版本的 Chartjs(即 2.5)遇到了一些问题,并且在处理时间序列数据时遇到了困难。 就上下文而言,我使用的是财务数据(股票价格和交易量)。
我是一名优秀的程序员,十分优秀!