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+)?), ]
是M
或A
或X
或。。。。所以像MMMMM
这样的东西也应该匹配。
你可能想要更像这样的东西:
^(MAX|SUM|AVERAGE|MIN): (\d+(\.\d+)?(, (?=.)|$))+$
解释:
(MAX|SUM|AVERAGE|MIN)
是MAX
、SUM
、AVERAGE
或MIN
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">