我正在为实数写一个正则表达式,为什么它会看到E度的符号?
^[-+]?[0-9]*[.,]?([eE][-+][0-9])?[0-9]*$
示例:
-12.12
012,123
342.4E-1
--12.12
12
您的
E
-matching片段出现在“分数”之前--匹配的片段--它位于错误的位置。这句话必须在结尾处。它应该与编写的
3E+1
OK匹配,但这并不是您想要的。
你有:
^[-+]?[0-9]*[.,]?([eE][-+][0-9])?[0-9]*$
它应该更像是:
^[-+]?[0-9]*[.,]?[0-9]*([eE][-+]?[0-9]+)?$
请注意,我添加了一个
+
,以便指数必须至少有一个,并且可能有许多位数。我添加了一个
?
,所以指数符号是可选的。
给定数据文件:
-12.12
012,123
342.4E-1
--12.12
12
使用
grep -E
运行表达式,得到输出:
$ grep -nE -e '^[-+]?[0-9]*[.,]?[0-9]*([eE][-+]?[0-9]+)?$' data
1:-12.12