我正在寻找代码编辑器(括号)的正则表达式,以查找以下格式的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
答案 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