gpt4 book ai didi

java - 奇数货币值(value)的正则表达式

转载 作者:行者123 更新时间:2023-12-01 18:57:01 26 4
gpt4 key购买 nike

我有一个包含奇怪货币值的字符串。该字符串是:

每日利息费用#901 $ 17.2789 259.18 190.07/天

奇数值是$ 17.2789

我正在尝试创建一个正则表达式,它将得到 is,但没有反向引用。这是我想到的:

(?:\\$\\s*?\\d{0,1,2,3}\\.\\d{0,1,2,3,4}\\s* ?/?日)?

但是这不会编译。里面的一切对我来说似乎都很合理?知道它可能有什么问题吗?我正在使用 Java

编辑

我已经尝试了 m.buettner 建议的 \\$\\s*\\d*\\.\\d*。我把它放在下面的第三组中。这几乎就可以做到。这是我的完整正则表达式:

(.*)\s?#(\s?\d{3,4})\s*(?:\$\s*\d*\.\d*)?((? :-|\()?\$?(?:\d{1,3}[ ,]?)*(?:\.\d+)\)?)\s*((?:-|\() ?\$?(?:\d{1,3}[ ,]?)*(?:\.\d+)\)?).*

它拉取的组是:

  1. 每日利息费用
  2. 901
  3. 9 259.18
  4. 190.07

问题出在分组 3 上。它包含一个额外的数字,第一个 9

编辑编辑

有一个空格导致了这个问题,这样做了:

(?:\$\s*\d*\.\d*\s)?

最佳答案

据我所知 \\d{0,1,2,3...} 不是有效的语法。你的意思可能是:

(?:\\$\\s*?\\d{0,3}\\.\\d{0,4}\\s*?/?day)?

另外,您是否知道您的整个模式是可选的?这就带来了一个问题。 \\d{0,3}\\.\\d{0,4} 将仅匹配第一个(奇数)数字。然后你有一个可选的斜杠,但有一个强制性的day(如果整个模式没有被删除)。但在您的输入字符串中,在遇到 /day 之前还有一些其他数字。所以即使它能编译,它也不会符合你的价格值(value)。您可能应该完全省略 \\s*?/?day 。并考虑删除外部 ?。正如 Brian 在评论中所说,没有必要使 \\s 重复变得不贪婪,因为它和以下元素无论如何都是互斥的:

\\$\\s*\\d{0,3}\\.\\d{0,4}

如果该值是“奇数”,您真的必须如此具体地指定位数吗?

\\$\\s*\\d*\\.\\d*

关于java - 奇数货币值(value)的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634372/

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