没有连接到它们的结束字符的数字的正则表达式

regular expression for numbers without their end character that connect to them

我需要可以为负数、逗号或小数的正则表达式。

例如:12 +12 -12.0 -12,345.5466 +12,345,678,678 0.154

但未通过:“500”。或“500”。 我希望 500 将 return 作为一个没有点或连接到数字的逗号的数字。

我写的正则表达式是:

[-+]?((0|([1-9](\d*|\d{0,2}(,\d{3})*)))(\.\d*[0-9])?)(?!\S)

它适用于正确的数字(如示例),但不适用于“500”或“500”。

假设你想在 500.500, 中匹配 500,你应该记住 (?!\S) 需要一个空格或紧靠右边的字符串结尾.

您可以通过

解决问题
[-+]?(?:0|[1-9](?:\d{0,2}(?:,\d{3})*|\d*))(?:\.\d+)?(?!\d)

请参阅 this regex demo,请注意,这可以进一步增强,具体取决于您需要排除的上下文。

我在末尾用 (?!\d) 替换了 (?!\S),如果右边有一个数字,而不是任何非空白字符,则匹配失败。

另请注意,我删除了不必要的组并将所有捕获组转换为非捕获组。

另外,请注意 (?:,\d{3})*|\d*) 组,我在其中交换了备选方案,因为第一个更具体,应该放在第一位。

详情

  • [-+]? - 可选的 -+
  • (?:0|[1-9](?:\d{0,2}(?:,\d{3})*|\d*)) - 0
    • [1-9] - 非零数字
    • (?:\d{0,2}(?:,\d{3})*|\d*) - 要么
      • \d{0,2}(?:,\d{3})* - 零个、一位或两位数字,然后出现零次或多次逗号和三位数字
      • | - 或
      • \d* - 零个或多个数字
  • (?:\.\d+)? - . 和一个或多个数字
  • 的可选序列
  • (?!\d) - 如果当前位置右侧紧邻数字,则匹配失败的否定前瞻。