java - 正则表达式没有前导点和最大一个前导零

标签 java android regex

如何编写匹配具有以下属性的字符串的正则表达式?:

  1. 包含数字以及作为小数分隔符的唯一点(但点不是必需的,这意味着它可以是 123123.4123.56).
  2. 没有前导点(不是 .12)。
  3. 前导零只能在后面跟一个点时写入(不能像000.12,只能是0.12)。
  4. 只有 2 位小数。

最佳答案

在小数点左边你想要一个不以零开头的数字(1 位或更多位):

[1-9][0-9]*

或者它可以只是一个零:

0|[1-9][0-9]*

数值可以有小数点和小数点后1-2位:

\.[0-9]{1,2}

左侧为必填项。小数点和小数位是可选的:

(?:0|[1-9][0-9]*)(?:\.[0-9]{1,2})?

需要第一个非捕获组来限制 | 模式的范围。需要第二个非捕获组来使组合的“小数点和小数位”模式可选。

请注意,这将允许尾随零,例如100.00


根据喜好,[0-9]也可以写成\d。我通常使用 \d,但由于正则表达式也有 [1-9],所以我更喜欢这里的 [0-9]我觉得这有助于澄清差异。

根据正则表达式的使用方式,您可能需要添加 ^ begin/$ end anchor 。在使用 find() 时需要它们,在使用 matches() 时不需要它们,但不会造成伤害:

^(?:0|[1-9][0-9]*)(?:\.[0-9]{1,2})?$

关于java - 正则表达式没有前导点和最大一个前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196783/

相关文章:

java - Java 中 String.equals() 的运行时复杂度

java - 本地 WSDL 的 FileNotFoundException

php - 使用 preg_replace 无法正常工作

regex - 这是否可以使用正则表达式来实现?

c# - 确保字符串仅包含 C# 中的某些字符

java - Wildfly 10 中未找到无状态 Bean 中的 JNDI

java - Android 实现 runOnUiThread

android - 市场中的 Google +1 按钮 (google play)

android - 如何在 Android 中将 XML 文件从 http 解析为 SQLite

android - 正确禁用 AdMob 广告