浮点文本的Regexp
我在寻找一个正则表达式来表示十进制浮点值浮点文本的Regexp,regex,Regex,我在寻找一个正则表达式来表示十进制浮点值 与整数文本不匹配 123无效 不需要在点前面加数字 .123有效 需要在点后加一个数字 1.无效 1.1有效 允许在除第一个位置以外的任何位置使用下划线 .1\u 2有效 \uu12无效 1_2.0有效 允许使用指数指示器 1e2有效 1.1e2有效 请注意,这不是重复,因为该问题没有提到浮点的指数部分,这给答案增加了大量复杂性,因为regexp的每个元素都简单明了,下面是它们的定义: 整数部分是[0-9][0-9.]* 小数部
- 与整数文本不匹配
无效123
- 不需要在点前面加数字
有效.123
- 需要在点后加一个数字
无效1.
有效1.1
- 允许在除第一个位置以外的任何位置使用下划线
有效.1\u 2
无效\uu12
有效1_2.0
- 允许使用指数指示器
有效1e2
有效1.1e2
请注意,这不是重复,因为该问题没有提到浮点的指数部分,这给答案增加了大量复杂性,因为regexp的每个元素都简单明了,下面是它们的定义:
- 整数部分是
[0-9][0-9.]*
- 小数部分是
\.[0-9][0-9\]*
- 指数部分是
[eE][+-]?[0-9][0-9.]*
|int|dec|exp|->|valid|
|===|===|===|==|=====|
| no| no| no|->| no |
| no| no|yes|->| no |
| no|yes| no|->| yes |
| no|yes|yes|->| yes |
|yes| no| no|->| no |
|yes| no|yes|->| yes |
|yes|yes| no|->| yes |
|yes|yes|yes|->| yes |
几个重复的regexp并不太糟糕,但是12个重复就太多了。这可以通过将表格简化为尽可能最小的形式来解决:
|int|dec|exp|->|valid|
|===|===|===|==|=====|
|yes| ? |yes|->| yes |
| ? |yes| ? |->| yes |
?
表示无论表达式是否存在,匹配仍然有效
在子规则中替换为:
# Row 1
(?:[0-9][0-9_]*+)
(?:\.[0-9][0-9_]*)?
(?:[eE][+-]?[0-9][0-9_]*)
| # Row 2
(?:[0-9][0-9_]*)?
(?:\.[0-9][0-9_]*)
(?:[eE][+-]?[0-9][0-9_]*)?
如果您喜欢模糊代码,也可以这样编写
(?:[0-9][0-9_]*)(?:\.[0-9][0-9_]*)?(?:[eE][+-]?[0-9][0-9_]*)|(?:[0-9][0-9_]*)?(?:\.[0-9][0-9_]*)(?:[eE][+-]?[0-9][0-9_]*)?
由于regexp的每个元素都简单明了,下面是它们的定义:
- 整数部分是
[0-9][0-9.]*
- 小数部分是
\.[0-9][0-9\]*
- 指数部分是
[eE][+-]?[0-9][0-9.]*
|int|dec|exp|->|valid|
|===|===|===|==|=====|
| no| no| no|->| no |
| no| no|yes|->| no |
| no|yes| no|->| yes |
| no|yes|yes|->| yes |
|yes| no| no|->| no |
|yes| no|yes|->| yes |
|yes|yes| no|->| yes |
|yes|yes|yes|->| yes |
几个重复的regexp并不太糟糕,但是12个重复就太多了。这可以通过将表格简化为尽可能最小的形式来解决:
|int|dec|exp|->|valid|
|===|===|===|==|=====|
|yes| ? |yes|->| yes |
| ? |yes| ? |->| yes |
?
表示无论表达式是否存在,匹配仍然有效
在子规则中替换为:
# Row 1
(?:[0-9][0-9_]*+)
(?:\.[0-9][0-9_]*)?
(?:[eE][+-]?[0-9][0-9_]*)
| # Row 2
(?:[0-9][0-9_]*)?
(?:\.[0-9][0-9_]*)
(?:[eE][+-]?[0-9][0-9_]*)?
如果您喜欢模糊代码,也可以这样编写
(?:[0-9][0-9_]*)(?:\.[0-9][0-9_]*)?(?:[eE][+-]?[0-9][0-9_]*)|(?:[0-9][0-9_]*)?(?:\.[0-9][0-9_]*)(?:[eE][+-]?[0-9][0-9_]*)?
12.e3怎么样<代码>1_2_3_4<代码>1\u\u 2?这些文字有语法吗?@thg435我看不出带下划线的示例无效的原因,除了它们是整数文字。编辑此问题是为了解决您的第一点。12.e3如何<代码>1_2_3_4<代码>1\u\u 2?这些文字有语法吗?@thg435我看不出带下划线的示例无效的原因,除了它们是整数文字。编辑此问题是为了解决您的第一点。