我应该使用什么正则表达式来从文本文件中删除指数项和浮点数?
例如,我的文件中有以下术语:
-0.161678
relational
0.081827
5.936420e-01
-0.155506
Favori54
0.086938
1.187284e+00
-0.149283
0.091921
"External"
1.780926e+00
-0.143025
我希望我的文件只包含以下几行:
relational
Favori54
"External"
答案1
在我看来你想要以任何内容开头的行但一个数字或减号。这将得到:
grep '^[^0-9,-]' file.txt
答案2
awk '/^[+-]?[0-9]+\.?[0-9]*([Ee][+-]?[0-9]+)?$/ { next }
/^[+-]?\.[0-9]+([Ee][+-]?[0-9]+)?$/ { next }
{ print }' yourfile
数字的尾数部分可以以点开头,也可以以点结尾,但不能仅为点:.
是无效的,并且添加指数(例如 ).E3
不会使其有效。0.
和.0
是有效的,无论有无指数。指数可以是大写或小写e
,并且可以具有明确的+
符号。
请注意,这假设浮点值周围没有空格。它还匹配整数值。此外,它还会通过与浮点表示法不同的项目,这些项目带有垃圾字符或其他字符,例如1E+
、1.0A
或.0E+33x
。请注意,其中一些示例将浮点表示法作为有效字首。
可以将两个正则表达式组合起来,以避免重复公共指数部分和公共规则操作。但结果的可读性会更差。
最后,{ print }
可以“精简代码”到1
。表达式1
为布尔真,而 awk 对真条件或匹配模式的默认操作是{ print }
。
答案3
尝试这个:
awk ‘{if($1+0!=$1) print $0}’ 文件名.txt