正则表达式:简单语法高亮显示(Python)

正则表达式:简单语法高亮显示(Python),python,regex,syntax-highlighting,Python,Regex,Syntax Highlighting,我一直在努力创建一个正则表达式来区分对象定义和在Python中调用该对象。其目的是突出显示语法 这就是需要解决的情况:(数字表示线) 我感兴趣的是匹配对象的名称,但如果在同一行中的任何地方前面有def,则不会匹配。上述代码的结果应为: “otherfunc”,第3行 正则表达式能够做这样的事情吗 编辑:我只关心一次扫描/搜索一行。您可以使用反向查找。这与前面没有原子的原子匹配。因此,在您的情况下,您需要查找前面没有“def”的otherfunc 我在这里使用PCRE正则表达式 (?<!de

我一直在努力创建一个正则表达式来区分对象定义和在Python中调用该对象。其目的是突出显示语法

这就是需要解决的情况:(数字表示线)

我感兴趣的是匹配对象的名称,但如果在同一行中的任何地方前面有def,则不会匹配。上述代码的结果应为:

“otherfunc”,第3行

正则表达式能够做这样的事情吗


编辑:我只关心一次扫描/搜索一行。

您可以使用反向查找。这与前面没有原子的原子匹配。因此,在您的情况下,您需要查找前面没有“def”的
otherfunc

我在这里使用PCRE正则表达式

(?<!def\s)otherfunc

(?我喜欢Richards的答案,但我也会考虑phyton和INTERNATION的有效函数名字符。因此,我得出以下结论:

(?<!(def\s))(?<=^|\s)[a-zA-Z_][\w_]*(?=\()
(?
看到这个了吗

解释 匹配有效,如果

  • (?它们不在
    def
    和空格之后

  • (?是的,在某种程度上…但是如果你想让它在多行字符串中不匹配,那么它就变得更难了…@AnttiHaapala我只关心一次扫描一行。我将编辑这个问题以反映这一点。你如何确定它是否是一个函数?一个类是可调用的,其他一些对象也是如此。你是否包括ude
    lambda
    s在这里?@cdarke这是一个很好的观点。将其称为函数是不精确的。我将编辑我的问题以反映这一点。这真的需要仅用正则表达式实现吗?如果你不熟悉正则表达式,有时可以采用更直接的方法。首先,搜索你想要的东西用一个简单的正则表达式搜索,然后对结果进行迭代以丢弃您不关心的内容。
    (?<!(def\s))(?<=^|\s)[a-zA-Z_][\w_]*(?=\()