正则表达式:简单语法突出显示(Python)

时间:2016-10-28 10:52:41

标签: python regex syntax-highlighting

我一直在努力创建一个正则表达式,它将区分对象定义并在Python中调用该对象。目的是语法高亮。

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

0    def otherfunc(vars...):
1        pass
2
3    otherfunc(vars...)

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

" otherfunc",line:3

正则表达式是否能够做到这样的事情?

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

2 个答案:

答案 0 :(得分:0)

你可以使用负面的lookbehind。这匹配一个前面没有原子的原子。因此,在您的情况下,您要查找otherfunc之前没有"def"

(?<!def\s)otherfunc

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

UPDATE wp_posts SET post_excerpt = CONCAT('This is the description for ',productTitle) WHERE post_type = 'product'

答案 1 :(得分:0)

我喜欢理查兹的答案,但我也会考虑植物和意图的有效功能名称字符。所以这就是我提出的:

(?<!(def\s))(?<=^|\s)[a-zA-Z_][\w_]*(?=\()

请参阅此working sample on Rexex101

说明

匹配有效python function names if

  1. (?<!(def\s))他们没有关注def和空白
  2. (?<=^|\s)要么在一行的开头,要么在一个空格之后(这是你得到的最接近的,因为lookbehinds不支持通配符说明符)
  3. 后面是一个左括号((
  4. 请注意,我不是一个phyton dev,所以为了简单[a-zA-Z_][\w_]*匹配有效的phyton 2.x函数名,你可以将表达式的这一部分扩展到phyton 3.x,我不知道of;)