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

标签 java regex

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

每日利息费用#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/

相关文章:

regex - sed 不会匹配下一行

regex - 从一列中提取域,同时保留其他列

java - QR 码显示为空白

Java 转换、覆盖和多态性

java - 在Java中更改AWS SDK的用户代理

regex - Rails 6 - 符合 RFC5322 的电子邮件验证

java - Spring查询字符串简单验证?

java - JPA(Hibernate)保存ManyToOne关系的问题

regex - clang 格式正则表达式语法引用

c# - 拆分字符串数组