我试图在Python代码中找到所有出现的文字浮点值。我可以在Komodo(或以任何其他方式)这样做吗?
换句话说,我想找到使用0.0或1.5或1e5之类的每一行,假设它被Python解释为浮点文字(例如没有注释)。
我在Python 3.1中使用Komodo 6.0。
如果可能的话,找到字符串和整数文字的方法也很好。
答案 0 :(得分:1)
您可以通过使用正则表达式选择所需内容来实现。
这个命令(在终端上运行)应该可以解决问题:
sed -r "s/^([^#]*)#.*$/\1/g" YOUR_FILE | grep -P "[^'\"\w]-?[1-9]\d*[.e]\d*[^'\"\w]"
你可能需要调整它以获得更好的结果。
`sed'删除了注释,而grep只选择包含(我给出的表达式的一个小子部分不是完美的)浮点值的行......
希望它有所帮助。
答案 1 :(得分:1)
我们的SD Source Code Search Engine (SCSE)可以轻松完成此操作。
SCSE是一种通过索引感兴趣的源代码语言元素来搜索大型源代码库的工具,比grep快得多。然后可以提出查询,其使用索引来实现搜索命中的快速定位。查询和命中显示在GUI中,单击命中将显示包含命中的源代码块。
SCSE知道它使用langauge编译器精确索引的每种语言的词法结构。 (它使用来自精确编程语言处理器系列的front ends;这个系列相当大,恰好包含了OP的Python / Perl / Java / ...的目标语言。因此,它确切地知道标识符,注释和文字(整数,浮点数,字符或字符串)的位置,以及它们的内容。
SCSE查询由表示感兴趣的语言元素序列的命令组成。查询
'for' ... I '=' N=103
在(“...”附近找到 for 关键字一个任意标识符(I),它被初始化(“=”),数值(“N”)为103.因为SCSE在理解语言结构时,它忽略了令牌之间的语言空白,例如,它可以通过插入空格,空格,换行符或注释来找到它。
查询标记I,N,F,S,C分别代表I(标识符),自然(数字),F(loat),S(tring)和C(omment)。 OP的原始问题,即找到所有浮点数,因此是几乎无关紧要的查询
F
类似于查找所有字符串文字(“S”)和整数文字(“N”)。如果您只想在Pi附近找到值的副本,则需要添加上限和上限约束:
F>3.14<3.16
(在大型Fortran代码上运行它非常有趣;你会看到Pi的各种不良近似值。)
SCSE不会在注释或字符串中找到Float,因为它非常了解差异。编写一个grep风格的表达式来处理所有奇怪的组合以消除空格或周围的引号和commente分隔符应该显然会更加痛苦。 Grep不是这样做的方法。