Python:带有原始 f 字符串的正则表达式仅在 50% 的时间内有效

Rob*_*ski 1 python regex

我有一本货币代码字典,每个字典都有一组国家代码。我想用 Regex 搜索特定国家/地区的货币,因此我开始编写一个模式,但目前我所拥有的模式仅在 50% 的时间内有效。这是 Python 中的错误吗?

这是代码。确保至少运行它五到十次,看看它只在某些时候有效。

local_currencies = str({
    'GBP': {'UK'},
    'USD': {'US'},
    'EUR': {'FR', 'DE', 'IT'},
})

country = 'FR'
pattern = fr"'.{{3}}': ?\{{'{country}'"

print(re.search(pattern, local_currencies))
Run Code Online (Sandbox Code Playgroud)

小智 5

失败的原因是因为{'FR', 'DE', 'IT'}是 a set,并且集合没有定义的顺序。当这成功时,这是因为 'FR' 首先出现在字符串表示中。当它失败时,那是因为 'DE' 或 'IT' 先出现。这不是 Python 中的错误。您不能期望从无序集合中获得一致的排序。

我强烈建议您使用不同的方法。依赖 python 对象的字符串表示是非常糟糕的形式。相反,您可以创建一个反向映射,例如country_to_currency = {'FR': 'EUR', 'DE': 'EUR', 'US': 'USD'}. 然后你可以简单地做country_to_currency['FR']