没有连接到它们的结束字符的数字的正则表达式
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)
- 如果当前位置右侧紧邻数字,则匹配失败的否定前瞻。
我需要可以为负数、逗号或小数的正则表达式。
例如: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)
- 如果当前位置右侧紧邻数字,则匹配失败的否定前瞻。