Java Regex-以OPERATION开头,后面必须跟整数或double

Java Regex-以OPERATION开头,后面必须跟整数或double,java,regex,Java,Regex,所以我有下面的输入字符串 OPERATION: 12, 12.32, 54.3332 操作可以是最小值、最大值、和中的任意一个。正则表达式应该接受仅以这三个单词中的任何一个开头,后跟冒号,后跟整数或双精度的字符串 在我决定求助于你们之前,我已经在谷歌和小提琴上搜索了好几个小时了 谢谢你的时间 编辑: 到目前为止,我已经用这个正则表达式结束了 ^[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]+$ 它匹配“MAX:”以及“MAX:”和“MA:。它还匹配以下格式的

所以我有下面的输入字符串

OPERATION: 12, 12.32, 54.3332
操作可以是最小值、最大值、和中的任意一个。正则表达式应该接受仅以这三个单词中的任何一个开头,后跟冒号,后跟整数或双精度的字符串

在我决定求助于你们之前,我已经在谷歌和小提琴上搜索了好几个小时了

谢谢你的时间

编辑:

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

^[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]+$
它匹配“MAX:”以及“MAX:”和“MA:。它还匹配以下格式的字符串:“MAX:12,12.3323…”

解释

(?: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
[.]
也可以写成
\.
,但将魔法字符放在字符类中是一种最佳做法,使用
[]
代替空格也是如此

参考资料

希望有帮助

解释

(?: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
[.]
也可以写成
\.
,但将魔法字符放在字符类中是一种最佳做法,使用
[]
代替空格也是如此

参考资料


希望这能有所帮助。

您误解了
[]
的含义。这些是指单字符替代方案

所以
[MAX:SUM:AVERAGE:MIN:(\\d+(\\\.\\d+)])
要么是
M
要么是
A
或者
X
或者….所以类似
MMMMM
的东西也应该匹配

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

^(最大值|和|平均值|最小值):(\\d+(\\.\\d+)(,(?=)|$)+$

说明:

(MAX | SUM | AVERAGE | MIN)
MAX
SUM
AVERAGE
MIN

:“
指实际字符
和空格。
\\d+(\\.\\d+)
是您以前拥有的。
,“
指实际字符
和空格。
(?=)
是向前看的。检查以下字符
(?=)
是否与任何单个字符(
)匹配(因此不是字符串的结尾),因此结尾不需要
“,”

因此,(?=)|$要么是
,“
不在末尾,要么什么都不在末尾

备选方案:不使用前瞻

^(最大值|和|平均值|最小值):(\\d+(\\\\.\\d+)(,\\d+(\\\.\\d+)*)$


.

您误解了
[]
的含义。这些是指单字符替代

所以
[MAX:SUM:AVERAGE:MIN:(\\d+(\\\.\\d+)])
要么是
M
要么是
A
或者
X
或者….所以类似
MMMMM
的东西也应该匹配

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

^(最大值|和|平均值|最小值):(\\d+(\\.\\d+)(,(?=)|$)+$

说明:

(MAX | SUM | AVERAGE | MIN)
MAX
SUM
AVERAGE
MIN

:“
指实际字符
和空格。
\\d+(\\.\\d+)
是您以前拥有的。
,“
指实际字符
和空格。
(?=)
是向前看的。检查以下字符
(?=)
是否与任何单个字符(
)匹配(因此不是字符串的结尾),因此结尾不需要
“,”

因此,(?=)|$要么是
,“
不在末尾,要么什么都不在末尾

备选方案:不使用前瞻

^(最大值|和|平均值|最小值):(\\d+(\\\\.\\d+)(,\\d+(\\\.\\d+)*)$


.

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

OPERATION: NUM, NUM, DECIMAL, DECIMAL
您的正则表达式是:

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

Matcher.group()
迭代找到的组


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

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

OPERATION: NUM, NUM, DECIMAL, DECIMAL
您的正则表达式是:

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

Matcher.group()
迭代找到的组


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

在你的操作之后总是有三个数字吗?不,整数/双精度数字是未知的,可以是任意的,但它必须在冒号后至少有一个,这个网站是玩正则表达式的好工具:在你的操作之后总是有三个数字吗?不,整数/双精度数字是未知的,可以是任意的,但它必须至少有1后的colonFYI,这个网站是一个伟大的工具玩正则表达式:唯一的问题是,上面的是,它要求每个领域是一个双。它不允许整数。
(MIN | MAX | SUM):[]+\\d+([.]\\d+)([,[]+\\d+([.]\\d+)*
略微更新,以允许在我第一次尝试->MAX:12时失败的输入。上面的Current仍然不准确,因为它将允许一些内容列表:
SUM:123,2344。
。如果存在
,则应该有以下数字。您可能希望链接到稍新的。上面的唯一问题是要求每个字段都是双精度的。它不允许整数。
(MIN | MAX | SUM):[]+\\d+([.]\\d+)([,[]+\\d+([.]\\d+)*
略微更新,以允许在我第一次尝试->MAX:12时失败的输入。上面的Current仍然不准确,因为它将允许一些内容列表:
SUM:123,2344。
。如果存在
,则应该有以下数字。您可能希望链接到稍新的。