正则表达式 - 从OPERATION开始,必须后跟整数或双精度

时间:2013-05-09 11:08:07

标签: java regex

所以我有以下输入字符串

OPERATION: 12, 12.32, 54.3332

OPERATION可以是MIN,MAX,SUM中的任何一个。正则表达式应该接受字符串,这些字符串只能以这三个单词中的任意一个开头,后跟冒号,后跟整数或双精度。

在我决定转向你们之前,我一直在谷歌上搜索并打了几个小时。

谢谢你的时间!

编辑:

到目前为止,我已经以此正则表达式结束了

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

它匹配“MAX:”以及“MAX:”和“MA:。它还匹配以下格式的字符串:”MAX:12,12.3323 ......“

3 个答案:

答案 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+)?), ]可以是MAX或......所以像MMMMM这样的内容也应该匹配。

你可能想要更像这样的东西:

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

<强>解释

(MAX|SUM|AVERAGE|MIN)可以是MAXSUMAVERAGEMIN
": "是指实际字符:和空格 \\d+(\\.\\d+)?就是你之前所拥有的 ", "是指实际字符,和空格 (?=.)是展望未来。检查以下字符(?=)是否与任何单个字符(.)匹配(因此不是字符串结尾),因此最后不需要", "
因此,, (?=.)|$要么", "不在最后,要么在最后没有任何内容。

替代方案:不使用预测

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

Test for both

Reference

答案 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”