【问题标题】:Extract Function name from Notepad++ for FunctionList从 Notepad++ 中为 FunctionList 提取函数名称
【发布时间】:2018-07-02 19:27:21
【问题描述】:

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

这里是解析器。

<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++ 中工作。 (我不能使用任何其他文本编辑器)。预先感谢您的帮助。

这里有额外的帮助。

【问题讨论】:

    标签: regex windows function notepad++


    【解决方案1】:

    这样试试

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

    你得到

    【讨论】:

      【解决方案2】:

      试试下面的正则表达式:

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

      Click for Regex Demo

      正则表达式解释:

      • (?i) - 使搜索不区分大小写的修饰符
      • (?&lt;=^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 之间的多余空格也被忽略了

      【讨论】:

      • 非常感谢@Gurman。它工作得很好。 \K 太棒了。我不知道存在这样的功能。我还有一个小要求。是否可以添加另一种类型的函数,它实际上以pro 开头。 pro another_routine, type IF(!DEBUG) THEN PRINT, 'get_algorithm_type' print, type END
      • @Cricrazy 对于这种情况,您可以使用此正则表达式 (?i)(?:(?&lt;=^function)|(?&lt;=^pro))\s+\K\w+
      • @Cricrazy 另外,如果答案对您有帮助,请考虑投票或接受答案
      • 完美运行。很高兴地接受了答案。非常感谢。
      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2012-08-28
      • 2020-02-09
      • 2021-04-11
      • 1970-01-01
      • 2011-03-13
      • 2014-08-04
      • 2011-12-24
      相关资源
      最近更新 更多