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