我正在尝试在 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++ 中运行。 (我无法使用任何其他文本编辑器)。预先感谢您的帮助。
这里有其他帮助。
最佳答案
尝试下面的正则表达式:
(?i)(?<=^function)\s+\K\w+
正则表达式说明:
-
(?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>
输出
关于regex - 从 Notepad++ 中提取 FunctionList 的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48410830/