匹配浮点数的任务
Task for matching floating point numbers
任务:
MATCH:
3.45
5,4
.45
3e4
,54
4
4.
4,
DON'T MATCH:
4,5e
2e
.3.
2e,4
,4.
d34
2.45t
2,45.
目前我想出了以下几点:
(?<=\s|^)[-+]?(?:(?:[.,]?\d+[.,]?\d*[eE]\d+(?!\w|[.,]))|[.,]?\d+[.,]?\d*(?!\w|[.,]))\b
这几乎适用于所有情况,除了最后 2 个数字(4. 和 4,)并卡住了
您可以使用
(?<!\S)[-+]?[0-9]*(?:[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?|(?<=\d)[,.])(?!\S)
详情
(?<!\S)
- 字符串的开头或空格必须立即出现在左侧
[-+]?
- 可选的 +
或 -
[0-9]*
- 0+ 位
(?:[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?|[,.])
- 要么
[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?
- 一个可选的 .
或 ,
,然后是 1+ 个数字,然后是一个可选的 e
或 E
序列,后跟一个可选 .
或 ,
和 1+ 位
|
- 或
(?<=\d)[,.]
- 仅当前面有数字时才为点或逗号(以避免匹配独立的 .
或 ,
)
(?!\S)
- 字符串结尾或空格必须紧靠右侧出现。
正则表达式图:
您可以使用 alternation 匹配 1+ 位后跟点或逗号和 0+ 位,或者匹配 Ee
部分后跟 1+ 位。
或匹配以点或逗号开头,后跟 1+ 个数字。
如果这是该行唯一匹配的内容,您可以使用锚点 ^
和 $
或使用环视来断言左右两侧没有非空白字符。
(?<!\S)(?:\d+(?:[.,]\d*|[eE]\d+)?|[.,]\d+)(?!\S)
图案部分
(?<!\S)
断言左边的不是非空白字符
(?:
非捕获组
\d+
匹配 1+ 个数字
(?:
非捕获组
[.,]\d*
匹配 .
或 ,
和 0+ 个数字
|
或
[eE]\d+
匹配 e
或 E
和 1+ 个数字
)?
关闭组并使其可选
|
或
[.,]\d+
匹配 .
或 ,
和 1+ 个数字
)
关闭群组
(?!\S)
断言右边的不是非空白字符
任务:
MATCH:
3.45
5,4
.45
3e4
,54
4
4.
4,
DON'T MATCH:
4,5e
2e
.3.
2e,4
,4.
d34
2.45t
2,45.
目前我想出了以下几点:
(?<=\s|^)[-+]?(?:(?:[.,]?\d+[.,]?\d*[eE]\d+(?!\w|[.,]))|[.,]?\d+[.,]?\d*(?!\w|[.,]))\b
这几乎适用于所有情况,除了最后 2 个数字(4. 和 4,)并卡住了
您可以使用
(?<!\S)[-+]?[0-9]*(?:[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?|(?<=\d)[,.])(?!\S)
详情
(?<!\S)
- 字符串的开头或空格必须立即出现在左侧[-+]?
- 可选的+
或-
[0-9]*
- 0+ 位(?:[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?|[,.])
- 要么[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?
- 一个可选的.
或,
,然后是 1+ 个数字,然后是一个可选的e
或E
序列,后跟一个可选.
或,
和 1+ 位|
- 或(?<=\d)[,.]
- 仅当前面有数字时才为点或逗号(以避免匹配独立的.
或,
)
(?!\S)
- 字符串结尾或空格必须紧靠右侧出现。
正则表达式图:
您可以使用 alternation 匹配 1+ 位后跟点或逗号和 0+ 位,或者匹配 Ee
部分后跟 1+ 位。
或匹配以点或逗号开头,后跟 1+ 个数字。
如果这是该行唯一匹配的内容,您可以使用锚点 ^
和 $
或使用环视来断言左右两侧没有非空白字符。
(?<!\S)(?:\d+(?:[.,]\d*|[eE]\d+)?|[.,]\d+)(?!\S)
图案部分
(?<!\S)
断言左边的不是非空白字符(?:
非捕获组\d+
匹配 1+ 个数字(?:
非捕获组[.,]\d*
匹配.
或,
和 0+ 个数字|
或[eE]\d+
匹配e
或E
和 1+ 个数字
)?
关闭组并使其可选|
或[.,]\d+
匹配.
或,
和 1+ 个数字
)
关闭群组(?!\S)
断言右边的不是非空白字符