0

所以我有以下输入字符串

OPERATION: 12, 12.32, 54.3332

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

在我决定求助于你们之前,我一直在谷歌搜索和摆弄几个小时。

谢谢你的时间!

编辑:

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

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

它匹配 "MAX:" 和 "MAX:" 和 "MA: 一样正确。它还匹配以下格式的字符串:"MAX: 12, 12.3323......"

4

3 回答 3

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

[.]也可以写成,\.但是将魔术字符放在字符类中是一种最佳做法,使用[ ]而不是空格也是如此。

参考

希望有帮助。

于 2013-05-09T11:12:54.883 回答
2

你误解了 的意思[]。这些是指单个字符的替代品。

[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]要么Mor Aor or ....所以X类似的东西MMMMM也应该匹配。

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

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

解释:

(MAX|SUM|AVERAGE|MIN)MAX, SUM,AVERAGEMIN.
": "指实际的字符:和空格。
\\d+(\\.\\d+)?是你以前的。
", "指实际的字符,和空格。
(?=.)是超前的。检查以下字符(?=)是否与任何单个字符 ( .) 匹配(因此不是字符串结尾),因此", "末尾不需要。
所以, (?=.)|$要么", "不是最后,要么什么都没有。

替代方案:不使用前瞻

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

测试两者

参考

于 2013-05-09T11:22:13.957 回答
1

java.util.regex.Pattern接受由一组贪婪格式表达式组成的正则表达式。您可以创建组来划分您的输入字符串。

OPERATION: NUM, NUM, DECIMAL, DECIMAL

你的正则表达式是:

([MIN,MAX,SUM]+):([0-9]{4}.[0-9]{2}),(...),(...),(...)

并使用:

Matcher.group()

迭代找到的组。

注意:我认为您的数字格式是“dddd.dd”

于 2013-05-09T11:24:33.937 回答