代码之家  ›  专栏  ›  技术社区  ›  gizmo

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

  •  3
  • gizmo  · 技术社区  · 14 年前

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

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

    我现在有:

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

    但它不符合要求,因为我可能会赶上30个字符在这里。

    1 回复  |  直到 14 年前
        1
  •  11
  •   Community THelper    7 年前
    ^(?=.{1,15}$)\d+(,\d+)?$
    
    • ^ 字符串的开头
    • (?=.{1,15}$) positive lookahead
    • \d+ 一个或多个数字
    • (,\d+)?
    • $ 字符串的结尾(实际上不是必需的,因为我们已经在lookahead中检查了它)。

    对于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"