如何使用Java正则表达式表达这样的需求?

如何使用Java正则表达式表达这样的需求?,java,regex,Java,Regex,我需要检查文件是否包含与特定格式匹配的金额: 介于1到15个字符(数字或“,”)之间 可能最多包含一个“,”小数分隔符 分隔符前必须至少有一个数字 这个量应该在字符串的中间,按字母字符(但我们必须排除错误的文件)。 我目前有: \d{1,15}(,\d{1,14})? 但它不符合要求,因为我可能会在这里最多捕获30个字符。 不幸的是,由于一些太长而无法在这里解释的原因,我不能简单地选择一个子字符串或使用任何其他java调用。匹配必须在一个与java兼容的正则表达式中 ^(?=.{1,15}

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

  • 介于1到15个字符(数字或“,”)之间
  • 可能最多包含一个“,”小数分隔符
  • 分隔符前必须至少有一个数字
  • 这个量应该在字符串的中间,按字母字符(但我们必须排除错误的文件)。
我目前有:

\d{1,15}(,\d{1,14})?
但它不符合要求,因为我可能会在这里最多捕获30个字符。
不幸的是,由于一些太长而无法在这里解释的原因,我不能简单地选择一个子字符串或使用任何其他java调用。匹配必须在一个与java兼容的正则表达式中

^(?=.{1,15}$)\d+(,\d+)?$
  • ^
    字符串的开头
  • (?=.{1,15}$)
    以确保字符串的总长度介于1和15之间
  • \d+
    一个或多个数字
  • (,\d+)
    可选后跟逗号和更多数字
  • $
    字符串的结尾(实际上不是必需的,因为我们已经在前瞻中检查了它)
您可能需要转义Java的反斜杠:
^(?=.{1,15}$)\\d+(,\\d+)$

Update:如果您在另一个字符串的中间寻找这个词,请使用Word边界<代码> \b/COD>而不是字符串边界(<代码> ^ < /COD>和<代码> $< /代码>)。 对于java:

"\\b(?=[\\d,]{1,15}\\b)\\d+(,\\d+)?\\b"
更具可读性的版本:

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

如果您知道所检查内容的限制,这将非常有用。它是,你有一个精确的字符串来匹配一个^…$表达式,或者你尝试在其他事物中间匹配那个表达式……我在其他事情的中间进行匹配,我会更新这个问题。在这种情况下,在我的回答中,用<代码> \b>代码>替换代码> >代码> $ >代码>谢谢你的回复。我用缺少的部分更新了需求,但能够修改您的建议,使其适合随附的regexp。我以(?=[,0-9]{1,15}[a-zA-Z])\d+(,\d+)结束?并且它可以与以前完成的检查一起工作。@gizmo
\b
如果数字后面紧跟着一个字母,则无法工作。但看起来你已经明白了。
"\\b(?=[0-9,]{1,15}\\b)[0-9]+(,[0-9]+)?\\b"