用于将数字范围与特定单位匹配的正则表达式

Regex for matching number ranges with specific units

我需要帮助来完成正则表达式模式。我需要一个模式来匹配一系列数字,包括单位。

示例:

我需要匹配整个范围。还可以 (?:km/10min|km / 10min|km/h|km/ h) 简化这部分,这样就不必多次列出。所以这里也考虑到了空白。

([,.\d]+)\s*(?:km/10min|km / 10min|km/h|km/ h)

https://regex101.com/r/Ey792V/1

目前,不幸的是,只有第一个号码匹配。在此先感谢您的帮助。

您可以使模式更具体一些,并可选择匹配空白字符,而不是对所有可能的空格变体进行硬编码

\b\d+(?:[.,]\d+)?(?:\s*-\s*\d+(?:[.,]\d+)?)?\s*km\s*/\s*(?:h|10min)\b

说明

  • \b一个单词边界
  • \d+(?:[.,]\d+)? 匹配 1+ 个带可选小数部分的数字
  • (?:非捕获组
    • \s*-\s* 在可选空白字符之间匹配 -
    • \d+(?:[.,]\d+)? 匹配 1+ 个带可选小数部分的数字
  • )?关闭非捕获组并使其可选
  • \s*km\s*/\s* 匹配 km/ 并用可选的空白字符包围以匹配不同的变体
  • (?:h|10min) 匹配 h10min(或使用 \d+min 匹配 1+ 个数字)
  • \b一个单词边界

看到一个regex demo

\d.+(?:h\b|min\b|s\b)

也可以。 Demo

你的问题不是很清楚,因为你是用例子来表述的。准确地说,您需要用文字陈述问题,然后使用示例进行说明。举个例子,这个问题并没有说清楚是否

"The car drives 40,5- 80 km /h on the road."

待匹配

用文字表达问题并不总是那么容易,但这是您需要掌握的一项技能,以便编写清晰的代码规范。 by-product 是它使代码更容易编写,因为这相当于只是将单词翻译成代码。

让我们试一试。

匹配由六个连续子字符串组成的字符串:

  1. 前面没有逗号或句点的一个或多个数字,后面可以选择跟一个逗号、连字符或句点,如果存在,则后跟一个或多个数字。
  2. 一个连字符,可以选择在 and/or 之后跟一个 space。
  3. 一个或多个数字,可以选择后跟逗号或句点,逗号或句点(如果存在)后跟一个或多个数字。
  4. 字面量“公里”。
  5. 一个正斜杠,可以选择在 and/or 之后跟一个 space。
  6. 文字“h”或一位或多位数字后跟“min”,后跟单词边界。

我不能确定这是你想要的,但你应该能够根据需要轻松修改这些要求。

现在让我们将这些要求转化为正则表达式。

1.前面没有逗号或句点的一位或多位数字,可以选择后跟逗号、连字符或句点,如果存在,则后跟一位或多位数字。

(?<![,.])\d+(?:[,.-]\d+)?

(?<![,.]) 是负面的 回顾 。需要避免匹配,例如下面字符串的指示部分。

"The car drives 1,500.5 - 80 km/10min on the road."
                      ^^^^^^^^^^^^^^^

2。一个连字符,可以选择在 and/or 之后跟一个 space.

 ?- ?

(第一个问号前面有一个 space。)

3。一位或多位数字,可选地后跟逗号或句点,逗号或句点(如果存在)后跟一位或多位数字。

\d+(?:[,.]\d+)?

4.文字“公里”。

km

5.一个正斜杠,可选地在 and/or 前面跟一个 space.

 ?\/ ?

(第一个问号前面有一个 space。)

6.文字“h”或一位或多位数字后跟“min”,后跟单词边界。

(?:h|\d+min)\b

现在我们可以简单地将这些部分连接起来形成正则表达式。

\d+(?:[,.-]\d+)? ?- ?\d+(?:[,.]\d+)?km ?\/ ?(?:h|\d+min)\b

Demo