0

我有以下正则表达式:

^(MIN|MAX|SUM|AVERAGE):[(\\d+(\\.\\d+)?), ]+$

我试图实施的规则应该只允许以下格式的字符串:

OPERATION: (comma separated list of integers or real numbers)

例如,必须允许以下内容:

MIN: 7, 89.7, 67
AVERAGE: 67.9, 89, 9

但是,它接受表单的输入

MAX: , 

如何避免在逗号两侧出现空格以被接受?

4

5 回答 5

1

正如您所尝试的那样,字符类不能包含正则表达式结构。

这与其他答案略有不同,导致正则表达式更小:

(MIN|MAX|SUM|AVERAGE): \\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*

不需要前导和尾随^-$它们是隐含的。

要使用:

if (str.matches("(MIN|MAX|SUM|AVERAGE): \\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*") {
    // yes, format is OK
}
于 2013-05-09T13:48:17.883 回答
1

你可以使用这个正则表达式

^(MIN|MAX|SUM|AVERAGE):\s*\d+(\.\d+)?(\s*,\s*\d+(\.\d+)?)*$
于 2013-05-09T13:26:06.417 回答
0

这将接受您的任何“操作”、“:”符号和任何数字/点,以逗号分隔,在第一个数字之前或任何逗号之后有或没有空格。它还将防止您的行以逗号结尾。

Pattern pattern = Pattern.compile("^(MIN|MAX|SUM|AVERAGE):\\s?(\\d+?(\\.\\d+?)?,?\\s?)+?\\d$");
于 2013-05-09T13:33:32.477 回答
0

尝试

"^(MIN|MAX|SUM|AVERAGE)\\s?:\\s?(\\d+(\\.\\d+)?)(,\\s?\\d+(\\.\\d+)?)*$"

测试:

MIN:4: true
MIN:4,4: true
MIN:4, 5: true
MIN:4 , 5: false
MIN: 7, 89.7, 67: true
AVERAGE: 67.9, 89, 9: true
MAX: , : false
于 2013-05-09T13:28:43.703 回答
-1

你的模式中有一个空格,所以你必须稍微调整一下,最快的改变就是这样,这样你的列表元素之间仍然可以有空格:

"^(MIN|MAX|SUM|AVERAGE):[(\d+(\.\d+)?)][(\d+(\.\d+)?), ]+$"
于 2013-05-09T13:26:13.977 回答