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

时间:2010-09-03 10:08:00

标签: java regex

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

  • 1到15个字符(数字或“,”)
  • 最多可包含一个“,”小数位分隔符
  • 必须至少在分隔符之前有一个数字
  • 此数量应该位于字符串的中间,以字母字符为界(但我们必须排除格式错误的文件)。

我目前有这个:

\d{1,15}(,\d{1,14})?

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

1 个答案:

答案 0 :(得分:11)

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

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

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

\b(?=[\d,]{1,15}\b)\d+(,\d+)?\b

对于java:

"\\b(?=[\\d,]{1,15}\\b)\\d+(,\\d+)?\\b"

更易阅读的版本:

"\\b(?=[0-9,]{1,15}\\b)[0-9]+(,[0-9]+)?\\b"
相关问题