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。
。如果存在
,则应该有以下数字。您可能希望链接到稍新的。