用于将数字范围与特定单位匹配的正则表达式
Regex for matching number ranges with specific units
我需要帮助来完成正则表达式模式。我需要一个模式来匹配一系列数字,包括单位。
示例:
- 汽车在路上行驶50,5 - 80km/10min
- 汽车在路上行驶 50,5 - 80 公里/10 分钟。
- 车在路上行驶40,5-80km/h
- 汽车在路上行驶30-50km/h
- 汽车在路上行驶 40 - 60.8 公里/小时。
- 车开40.90-60,8km/h上路
我需要匹配整个范围。还可以 (?: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)
匹配 h
或 10min
(或使用 \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 是它使代码更容易编写,因为这相当于只是将单词翻译成代码。
让我们试一试。
匹配由六个连续子字符串组成的字符串:
- 前面没有逗号或句点的一个或多个数字,后面可以选择跟一个逗号、连字符或句点,如果存在,则后跟一个或多个数字。
- 一个连字符,可以选择在 and/or 之后跟一个 space。
- 一个或多个数字,可以选择后跟逗号或句点,逗号或句点(如果存在)后跟一个或多个数字。
- 字面量“公里”。
- 一个正斜杠,可以选择在 and/or 之后跟一个 space。
- 文字“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
我需要帮助来完成正则表达式模式。我需要一个模式来匹配一系列数字,包括单位。
示例:
- 汽车在路上行驶50,5 - 80km/10min
- 汽车在路上行驶 50,5 - 80 公里/10 分钟。
- 车在路上行驶40,5-80km/h
- 汽车在路上行驶30-50km/h
- 汽车在路上行驶 40 - 60.8 公里/小时。
- 车开40.90-60,8km/h上路
我需要匹配整个范围。还可以 (?: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)
匹配h
或10min
(或使用\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 是它使代码更容易编写,因为这相当于只是将单词翻译成代码。
让我们试一试。
匹配由六个连续子字符串组成的字符串:
- 前面没有逗号或句点的一个或多个数字,后面可以选择跟一个逗号、连字符或句点,如果存在,则后跟一个或多个数字。
- 一个连字符,可以选择在 and/or 之后跟一个 space。
- 一个或多个数字,可以选择后跟逗号或句点,逗号或句点(如果存在)后跟一个或多个数字。
- 字面量“公里”。
- 一个正斜杠,可以选择在 and/or 之后跟一个 space。
- 文字“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