我有以下正则表达式:
^(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: ,
如何避免逗号两边的空格被接受?
答案 0 :(得分:1)
您可以使用此正则表达式
^(MIN|MAX|SUM|AVERAGE):\s*\d+(\.\d+)?(\s*,\s*\d+(\.\d+)?)*$
答案 1 :(得分:1)
字符类不能像正在尝试的那样包含正则表达式构造。
这与其他答案略有不同,导致较小的正则表达式:
(MIN|MAX|SUM|AVERAGE): \\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*
不需要前导和尾随^
和$
- 它们是隐含的。
使用:
if (str.matches("(MIN|MAX|SUM|AVERAGE): \\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*") {
// yes, format is OK
}
答案 2 :(得分: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
答案 3 :(得分:0)
这将接受您的任何“操作”,“:”符号和任何数字/点,逗号分隔,在第一个数字之前或之后有逗号或空格。 它还会阻止您的行以逗号结尾。
Pattern pattern = Pattern.compile("^(MIN|MAX|SUM|AVERAGE):\\s?(\\d+?(\\.\\d+?)?,?\\s?)+?\\d$");
答案 4 :(得分:-1)
你的模式中有一个空格,所以你必须稍微调整一下,最快的改动就是这样,这样你的列表元素之间仍然可以有空格:
"^(MIN|MAX|SUM|AVERAGE):[(\d+(\.\d+)?)][(\d+(\.\d+)?), ]+$"