为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2022-01-12 10:17:03
我需要检查一个字符串是否匹配这个特定的模式。模式是:(数字)(允许所有字符)(数字)并且数字可能有逗号(“。”或“,”)!例如,输入可以是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在等式中添加单词(例如),则需要修改表达式。

你可以在这里看到这个正则表达式


查看完整回答
反对 回复 2022-01-12
?
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 次以上

  • 与第一个模式相同


查看完整回答
反对 回复 2022-01-12
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信