我需要检查一个字符串是否匹配这个特定的模式。模式是:(数字)(允许所有字符)(数字)并且数字可能有逗号(“。”或“,”)!例如,输入可以是500+400或400,021+213.443。我试过了Pattern.matches("[0-9],?.?+[0-9],?.?+", theequation2),但是没有用!我知道我必须使用方法 Pattern.match(regex, String),但我无法找到正确的正则表达式。
2 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
处理数字可能很困难。这种方法将处理您的示例,但请仔细检查。我也没有在中间分组中做“所有字符”,因为“所有”将包括数字,所以我认为找到下一个非数字是合适的。
此 Java 正则表达式处理要求:
"((-?)[\\d,.]+)([^\\d-]+)((-?)[\\d,.]+)"
但是,上面有一个潜在的问题。考虑以下几点: 300 - -200
. 上述情况与这种情况不符。
现在,根据这些示例,我认为重点是应该有一个有效的运算符。数学运算的数量可能有限,因此我会将中间的运算符列入白名单。因此,类似:
"((-?)[\\d,.]+)([\\s]*[*/+-]+[\\s]*)((-?)[\\d,.]+)"
会,我认为,更合适。该[*/+-]
可为电力运营商进行扩展^
或什么的。现在,如果要开始mod
在等式中添加单词(例如),则需要修改表达式。
12345678_0001
TA贡献1802条经验 获得超5个赞
在您正则表达式,你必须逃脱点\.
字面匹配它,逃离\+
否则会使?
一个占有欲量词。要匹配 1+ 位,您必须使用量词[0-9]+
对于您的示例数据,您可以匹配 1+ 个数字,后跟一个可选部分,该部分匹配开头和结尾的点或逗号。如果您想匹配任何字符 1 次,您可以使用点。
除了使用点之外,您还可以使用例如字符类[-+*]
来列出一些运算符或列出您允许匹配的内容。如果这应该是唯一的匹配项,您可以使用锚点来断言字符串的开头^
和结尾$
。
\d+(?:[.,]\d+)?.\d+(?:[.,]\d+)?
在 Java 中:
String regex = "\\d+(?:[.,]\\d+)?.\\d+(?:[.,]\\d+)?";
那将匹配:
\d+(?:[.,]\d+)?
1+ 数字后跟可选部分匹配.
或,
后跟 1+ 数字.
匹配任何字符(使用 .+
)重复 1 次以上与第一个模式相同
添加回答
举报
0/150
提交
取消