如何使用Java正则表达式表达此类要求?

giz*_*zmo 3 java regex

我需要检查一个文件是否包含一些与特定格式匹配的金额:

  • 1到15个字符(数字或",")
  • 最多可包含一个","小数位分隔符
  • 必须至少在分隔符之前有一个数字
  • 这个数量应该在一个字符串的中间,由字母字符限定(但我们必须排除格式错误的文件).

我目前有这个:

\d{1,15}(,\d{1,14})?
Run Code Online (Sandbox Code Playgroud)

但它与要求不符,因为我在这里最多可以捕到30个字符.
不幸的是,由于某些原因,这里解释的时间太长,我不能简单地选择子字符串或使用任何其他java调用.匹配必须是一个与java兼容的正则表达式.

Ama*_*osh 11

^(?=.{1,15}$)\d+(,\d+)?$
Run Code Online (Sandbox Code Playgroud)
  • ^ 字符串的开头
  • (?=.{1,15}$) 积极向前看以确保字符串的总长度在1到15之间
  • \d+ 一个或多个数字
  • (,\d+)? 可选地后跟逗号和更多数字
  • $ 字符串的结尾(不是真的需要,因为我们已经在前瞻中检查了它).

您可能必须为Java转义反斜杠: ^(?=.{1,15}$)\\d+(,\\d+)?$

更新:如果您在另一个字符串的中间查找它,请使用单词边界\b而不是字符串边界(^$).

\b(?=[\d,]{1,15}\b)\d+(,\d+)?\b
Run Code Online (Sandbox Code Playgroud)

对于java:

"\\b(?=[\\d,]{1,15}\\b)\\d+(,\\d+)?\\b"
Run Code Online (Sandbox Code Playgroud)

更易阅读的版本:

"\\b(?=[0-9,]{1,15}\\b)[0-9]+(,[0-9]+)?\\b"
Run Code Online (Sandbox Code Playgroud)