从Notepad ++中为FunctionList提取函数名称

时间:2018-01-23 21:07:29

标签: regex windows function notepad++

我正在尝试在 Notepad ++ 中为新语言设置功能列表。为此,它需要我在functionlist.xml中添加解析器。我添加了解析器,它可以工作,但它还在函数列表中添加了实际的单词function。如何从中删除单词功能?我已经研究了正则表达式的lookbehind功能。但我无法使其发挥作用。

这是解析器。

<parser displayName="mylang" id="mylang_syntax">
  <function mainExpr="^\s*(function|Function|FUNCTION)[\t ]+[\w]+">
    <functionName>
      <NameExpr expr="/(?<=^function /)[\w]+" />
      <NameExpr expr="/(?<=^Function /)[\w]+" />
      <nameexpr expr="/(?<=^FUNCTION /)[\w]+" />
    </functionName>
  </function>
</parser>

以下是试用的示例文字。

FUNCTION uniqn, input_array
  IF(!DEBUG) THEN PRINT, 'uniqn_no_sort'
  counter = 0L
  length = n_elements(input_array(*, 0))
  duplicate_array = STRARR(length)
END

function get_algorithm_type, type
  IF(!DEBUG) THEN PRINT, 'get_algorithm_type'
  print, type
END

这就是它在功能列表侧栏中的样子。我想删除“功能”这个词。 请注意它需要在Notepad ++中工作。 (我不能使用任何其他文本编辑器)。预先感谢您的帮助。

enter image description here

以下是其他帮助。

2 个答案:

答案 0 :(得分:1)

尝试这样

<parser displayName="mylang" id="mylang_syntax">
  <function mainExpr="(?<=function|Function|FUNCTION)[\t ]+[\w]+"/>
</parser>

你得到了

enter image description here

答案 1 :(得分:1)

试试下面的正则表达式:

(?i)(?<=^function)\s+\K\w+

<强> Click for Regex Demo

正则表达式说明:

  • (?i) - 用于使搜索不区分大小写的修饰符
  • (?<=^function) - 在行首处找到紧跟在子字符串function之前的位置的正面后视
  • \s+ - 匹配1个以上的空格字符
  • \K - 忘记目前为止匹配的所有内容
  • \w+ - 匹配属于字符类[a-zA-Z0-9_]的所有字符的1 +次出现

将以下parser标记添加到文件functionList.xml

<parser id="mylang" displayName="mylang_syntax">
    <function mainExpr="(?i)(?<=^function)\s+\K\w+" />
</parser>

<强>输出

如下所示,functionfunctionName之间的额外空格也被忽略了 enter image description here