Regex-以OPERATION开头,后面必须跟一个整数或双精度



SO我有以下输入字符串

OPERATION: 12, 12.32, 54.3332

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

在我决定求助于你们之前,我已经在谷歌上搜索了好几个小时,坐立不安。

谢谢你抽出时间!

编辑:

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

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

它匹配正确的"MAX:"以及"MAX:"one_answers"MA:"。它还匹配以下格式的字符串:"MAX:1212.3323……">

您误解了[]的含义。这些是指单个字符的备选方案。

所以[MAX:SUM:AVERAGE:MIN:(\d+(\.\d+)?), ]MAX或。。。。所以像MMMMM这样的东西也应该匹配。

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

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

解释:

(MAX|SUM|AVERAGE|MIN)MAXSUMAVERAGEMIN
CCD_ 13是指实际的字符CCD_
\d+(\.\d+)?是你以前拥有的
CCD_ 16是指实际的字符CCD_
(?=.)是前瞻性的。检查以下字符(?=)是否与任何单个字符(.(匹配(因此不是字符串的末尾(,因此末尾不需要", "
所以CCD_ 22要么是CCD_ 23不在末尾,要么什么都没有。

替代方案:不使用前瞻

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

测试两者

参考。

(?: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

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

参考

  • Java模式

希望能有所帮助。

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

OPERATION: NUM, NUM, DECIMAL, DECIMAL

您的正则表达式是:

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

和用途:

Matcher.group()

以迭代找到的组。

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

最新更新