如何以这种方式匹配字符串?

我需要检查一个字符串是否匹配这个特定的模式。

模式是:

(数字)(允许所有字符)(数字)

并且数字可能有逗号(“。”或“,”)!

例如,输入可以是500+400400,021+213.443

我试过了Pattern.matches("[0-9],?.?+[0-9],?.?+", theequation2),但是没有用!

我知道我必须使用方法 Pattern.match(regex, String),但我无法找到正确的正则表达式。


蛊毒传说
浏览 161回答 2
2回答

拉莫斯之舞

处理数字可能很困难。这种方法将处理您的示例,但请仔细检查。我也没有在中间分组中做“所有字符”,因为“所有”将包括数字,所以我认为找到下一个非数字是合适的。此 Java 正则表达式处理要求:"((-?)[\\d,.]+)([^\\d-]+)((-?)[\\d,.]+)"但是,上面有一个潜在的问题。考虑以下几点: 300 - -200. 上述情况与这种情况不符。现在,根据这些示例,我认为重点是应该有一个有效的运算符。数学运算的数量可能有限,因此我会将中间的运算符列入白名单。因此,类似:"((-?)[\\d,.]+)([\\s]*[*/+-]+[\\s]*)((-?)[\\d,.]+)"会,我认为,更合适。该[*/+-]可为电力运营商进行扩展^或什么的。现在,如果要开始mod在等式中添加单词(例如),则需要修改表达式。你可以在这里看到这个正则表达式

12345678_0001

在您正则表达式,你必须逃脱点\.字面匹配它,逃离\+否则会使?一个占有欲量词。要匹配 1+ 位,您必须使用量词[0-9]+对于您的示例数据,您可以匹配 1+ 个数字,后跟一个可选部分,该部分匹配开头和结尾的点或逗号。如果您想匹配任何字符 1 次,您可以使用点。除了使用点之外,您还可以使用例如字符类[-+*]来列出一些运算符或列出您允许匹配的内容。如果这应该是唯一的匹配项,您可以使用锚点来断言字符串的开头^和结尾$。\d+(?:[.,]\d+)?.\d+(?:[.,]\d+)?在 Java 中:String regex = "\\d+(?:[.,]\\d+)?.\\d+(?:[.,]\\d+)?";正则表达式演示那将匹配:\d+(?:[.,]\d+)?1+ 数字后跟可选部分匹配.或,后跟 1+ 数字.匹配任何字符(使用 . +)重复 1 次以上与第一个模式相同
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java