正则表达式:简单语法高亮显示(Python)
我一直在努力创建一个正则表达式来区分对象定义和在Python中调用该对象。其目的是突出显示语法 这就是需要解决的情况:(数字表示线) 我感兴趣的是匹配对象的名称,但如果在同一行中的任何地方前面有def,则不会匹配。上述代码的结果应为: “otherfunc”,第3行 正则表达式能够做这样的事情吗正则表达式:简单语法高亮显示(Python),python,regex,syntax-highlighting,Python,Regex,Syntax Highlighting,我一直在努力创建一个正则表达式来区分对象定义和在Python中调用该对象。其目的是突出显示语法 这就是需要解决的情况:(数字表示线) 我感兴趣的是匹配对象的名称,但如果在同一行中的任何地方前面有def,则不会匹配。上述代码的结果应为: “otherfunc”,第3行 正则表达式能够做这样的事情吗 编辑:我只关心一次扫描/搜索一行。您可以使用反向查找。这与前面没有原子的原子匹配。因此,在您的情况下,您需要查找前面没有“def”的otherfunc 我在这里使用PCRE正则表达式 (?<!de
编辑:我只关心一次扫描/搜索一行。您可以使用反向查找。这与前面没有原子的原子匹配。因此,在您的情况下,您需要查找前面没有“def”的
otherfunc
我在这里使用PCRE正则表达式
(?<!def\s)otherfunc
(?我喜欢Richards的答案,但我也会考虑phyton和INTERNATION的有效函数名字符。因此,我得出以下结论:
(?<!(def\s))(?<=^|\s)[a-zA-Z_][\w_]*(?=\()
(?
看到这个了吗
解释
匹配有效,如果
(?它们不在def
和空格之后
(?是的,在某种程度上…但是如果你想让它在多行字符串中不匹配,那么它就变得更难了…@AnttiHaapala我只关心一次扫描一行。我将编辑这个问题以反映这一点。你如何确定它是否是一个函数?一个类是可调用的,其他一些对象也是如此。你是否包括udelambda
s在这里?@cdarke这是一个很好的观点。将其称为函数是不精确的。我将编辑我的问题以反映这一点。这真的需要仅用正则表达式实现吗?如果你不熟悉正则表达式,有时可以采用更直接的方法。首先,搜索你想要的东西用一个简单的正则表达式搜索,然后对结果进行迭代以丢弃您不关心的内容。
(?<!(def\s))(?<=^|\s)[a-zA-Z_][\w_]*(?=\()