【问题标题】:RegEx pattern for a price [duplicate]价格的正则表达式模式[重复]
【发布时间】:2014-01-13 11:37:58
【问题描述】:

这可能是一个愚蠢的问题,但我是 RegExes 的新手。 我的 python 程序中需要一个 RegEx 模式以获取价格。

示例案例:

8.00
25.14
271.61
2,367.82
52,124.09
9,37,159.82

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 我认为您的最后一个示例格式错误。逗号后面应该跟三位数字,你有9,37,159.82
  • 是的,但是 amazon.in 使用相同的定价模式,我的程序从 amazon.in 中抓取数据。
  • 请在提问之前对正则表达式进行一些研究。如果您仍然没有成功,请在问题中展示您尝试过的内容。
  • @kaveman:如果帖子有问题,请详细描述问题,而不是仅仅发布“你试过什么”。请参阅this Meta post,了解“您尝试过什么”cmets 是否可以接受以及“您尝试过什么”的替代方案。谢谢!

标签: python regex python-2.7


【解决方案1】:

这一项符合以上所有条件:

(\d{1,3},?)*\d{1,3}\.\d{2}

【讨论】:

    【解决方案2】:

    您正在尝试匹配根据Indian numbering system 规则格式化的数字。为了正确地做到这一点,您必须仔细定义您希望将什么视为匹配项。例如,100,10,100.00 这样的字符串会构成匹配吗?您可以在此示例中找到格式有效的数字,即10,100.00,但我假设出于您的目的,示例中的字符串不应匹配。我对测试进行了详细说明,并提出了这个测试套件:

    # match
    8.00
    25.14
    271.61
    2,367.82
    52,124.09
    9,37,159.82
    
    # don't match
    9,378,159.82
    9,37,159.820
    12,.80
    12,12
    12.,12
    12,12.80
    10,80
    .80
    80,
    

    以下正则表达式成功通过了这些测试。

    (?<![\d,])((\d{1,2},)*\d{3}|(\d{1,3}))\.\d{2}(?!\d)
    

    【讨论】:

    • 为什么:9,37,159.82 匹配?
    • 恐怕我不太明白你的问题,但我会尽力解释它。 9,37,159.82 是一个格式正确的数字,符合印度编号系统。解释为什么提供的正则表达式匹配这个特定的数字,即编写正则表达式的逐步执行,对于评论来说太长了。如果您有兴趣了解正则表达式引擎将采取哪些步骤,我建议您使用调试工具。您可以在这个问题stackoverflow.com/questions/2348694/how-do-you-debug-a-regex 中找到调试正则表达式的不同选项
    • 从未见过在 1 和 2 后使用逗号的价格 - 仅此而已。价格通常为 100,000.00 美元或类似的价格。 OP没有提到印度编号系统,但我也不熟悉。
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2016-01-11
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多