代码之家  ›  专栏  ›  技术社区  ›  max

在Python代码中查找所有浮点文本

  •  1
  • max  · 技术社区  · 14 年前

    我试图在Python代码中找到所有出现的文本浮点值。我可以在科莫多(或其他方式)那样做吗?

    换句话说,我想找到每一行使用0.0、1.5或1e5之类的内容,假设Python将其解释为浮点文字(例如,没有注释)。

    如果可能的话,找到字符串和整数文本的方法也很好。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ira Baxter    14 年前

    我们的 SD Source Code Search Engine (SCSE) 很容易做到。

    SCSE是通过索引感兴趣的源代码语言的元素来搜索大的源代码基,比GRIP快得多的工具。然后可以提出查询,使用索引来快速定位搜索结果。查询和点击会显示在一个GUI中,点击点击会显示包含点击的源代码块。

    SCSE知道每种语言的词汇结构,它的索引与朗格的编译器精确。(它使用 front ends 来自精确编程语言处理器系列;这个系列相当大,碰巧包括OP的目标语言Python/Perl/Java/。因此,它确切地知道标识符、注释和文本(整数、浮点、字符或字符串)在哪里,以及它们的内容。

    SCSE查询由表示感兴趣的语言元素序列的命令组成。询问

    'for' ... I '=' N=103
    

    对于 关键字near(“…”)用数值103(“=”)初始化的任意标识符(I)。因为SCSE理解语言结构,所以它忽略了标记之间的语言空白,例如,它可以在不考虑中间空白、空白、换行符或注释的情况下找到它。

    F
    

    类似地,用于查找所有字符串文本(“S”)和整型文本(“N”)。如果只想在Pi附近找到值的副本,可以添加下限和上限约束:

    F>3.14<3.16
    

    SCSE在注释或字符串中找不到浮点数,因为它非常清楚两者的区别。编写一个grep风格的表达式来处理所有奇怪的组合,以消除空白或周围的引号和注释分隔符,显然要痛苦得多。格雷普不是这样做的。

        2
  •  1
  •   peoro    14 年前

    您可以通过选择正则表达式所需的内容来实现这一点。

    这个命令(在终端上运行)应该可以做到:

    sed -r "s/^([^#]*)#.*$/\1/g" YOUR_FILE | grep -P "[^'\"\w]-?[1-9]\d*[.e]\d*[^'\"\w]"
    

    你可能需要调整一下才能得到更好的结果。

    `sed删除注释,而grep只选择包含( )浮点值。。。