正则表达式-匹配3位数字

时间:2019-08-17 21:11:43

标签: regex

我正在寻找代码编辑器(括号)的正则表达式,以查找以下格式的3位数字

129 (3-digit WITHOUT DOT)
107.23 (3-digit DOT 2-digit)

但不能

117.234 (3-digit DOT 3-digit or more)
X306 (Character before number)

我已经尝试过:[0-9]{3,3}[.][0-9]{0,2}|\b\d{3,3}\b

但是它也与117.234 / 105.123432部分匹配。...

X306
50.17080
8.69507,
50.178075,
50.050512
117.234
49.172
129
105.123432
107.23

2 个答案:

答案 0 :(得分:5)

您可以使用

\b(?<!\d\.)\d{3}(?:\.\d{1,2})?\b(?!\.\d)

请参见regex demo

详细信息

  • \b(?<!\d\.)-不带数字和点的单词边界
  • \d{3}(?:\.\d{1,2})?-3位数字,后跟.和1或2位数字的可选序列
  • \b(?!\.\d)-单词边界,后跟点和数字。

答案 1 :(得分:1)

您可以使用以下涵盖所有案例的最小化正则表达式。
结果是更快的正则表达式。

\b(?<!\.)\d{3}(?:\.\d{2})?\b(?!\.)

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

 \b 
 (?<! \. )
 \d{3} 
 (?:
      \. \d{2} 
 )?
 \b   
 (?! \. )

基准

Regex1:   \b(?<!\.)\d{3}(?:\.\d{2})?\b(?!\.)
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   2
Elapsed Time:    1.18 s,   1175.88 ms,   1175882 µs
Matches per sec:   85,042


Regex2:   \b(?<!\d\.)\d{3}(?:\.\d{1,2})?\b(?!\.\d)
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   2
Elapsed Time:    1.31 s,   1307.20 ms,   1307199 µs
Matches per sec:   76,499