所以我有以下输入字符串
OPERATION: 12, 12.32, 54.3332
OPERATION可以是MIN,MAX,SUM中的任何一个。正则表达式应该接受字符串,这些字符串只能以这三个单词中的任意一个开头,后跟冒号,后跟整数或双精度。
在我决定转向你们之前,我一直在谷歌上搜索并打了几个小时。
谢谢你的时间!
编辑:
到目前为止,我已经以此正则表达式结束了
^[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]+$
它匹配“MAX:”以及“MAX:”和“MA:。它还匹配以下格式的字符串:”MAX:12,12.3323 ......“
答案 0 :(得分:2)
(?:MIN|MAX|SUM):[ ]+\d+(?:[.]\d+)?(?:,[ ]+\d+(?:[.]\d+)?)*
<强>解释强>
(?:MIN|MAX|SUM) - either one of the operations, non-capturing
: - a literal :
[ ]+ - 1 or more space characters
\d+ - 1 or more digits
(?:[.]\d+)? - optionally a literal . followed by 1 or more digits, non-capturing
(?:,...)* - a literal comma and another number, 0 or more times, non-capturing
[.]
也可以写成\.
,但将魔术字符放在字符类中是最佳做法,使用[ ]
代替空格也是如此。
<强>参考强>
希望有所帮助。
答案 1 :(得分:2)
你误解了[]
的含义。这些是指单字符替代品。
所以[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]
可以是M
或A
或X
或......所以像MMMMM
这样的内容也应该匹配。
你可能想要更像这样的东西:
^(MAX|SUM|AVERAGE|MIN): (\\d+(\\.\\d+)?(, (?=.)|$))+$
<强>解释强>
(MAX|SUM|AVERAGE|MIN)
可以是MAX
,SUM
,AVERAGE
或MIN
。
": "
是指实际字符:
和空格
\\d+(\\.\\d+)?
就是你之前所拥有的
", "
是指实际字符,
和空格
(?=.)
是展望未来。检查以下字符(?=)
是否与任何单个字符(.
)匹配(因此不是字符串结尾),因此最后不需要", "
。
因此,, (?=.)|$
要么", "
不在最后,要么在最后没有任何内容。
替代方案:不使用预测
^(MAX|SUM|AVERAGE|MIN): (\\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*)$
答案 2 :(得分:1)
java.util.regex.Pattern
接受由Greedy格式表达式组成的正则表达式。您可以创建组来划分输入字符串。
OPERATION: NUM, NUM, DECIMAL, DECIMAL
你的正则表达式是:
([MIN,MAX,SUM]+):([0-9]{4}.[0-9]{2}),(...),(...),(...)
并使用:
Matcher.group()
迭代找到的组。
注意:我认为你的数字格式是“dddd.dd”