gpt4 book ai didi

python - 财务数字的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:05 27 4
gpt4 key购买 nike

根据对与正则表达式相关的其他问题的回答,我认为我的机会很小。

我尝试解析不同表示形式的数字:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com