我需要检查一个文件是否包含一些与特定格式匹配的金额:
我目前有这个:
\d{1,15}(,\d{1,14})?
但它与要求不符,因为我最多可以在这里捕获30个字符 不幸的是,由于某些原因,这里解释的时间太长,我不能简单地选择子字符串或使用任何其他java调用。匹配必须是一个与java兼容的正则表达式。
答案 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"