【问题标题】:Optional arguments in Python Script for Notepad++Notepad++ 的 Python 脚本中的可选参数
【发布时间】:2015-09-13 14:55:59
【问题描述】:

我正在尝试自动删除我在 Notepad++ 上编辑的 HTML 代码中的一些文本。我发现插件“Python Script”会是一个不错的选择。

在我看来,我应该使用 Editor.rereplace,如下所示:

Editor.rereplace(search, replace[, flags[, startPosition[, endPosition[, maxCount]]]]) 

唯一的问题是我想使用可选参数“maxCount”而不是“flags”、“startposition”和“endposition”

我试过这样编码:

Editor.rereplace("old", "new", maxCount=1)

这行不通,我猜是因为它不是真正的 Python,而是 Scintilla 语言。因此,我查看了 Scintilla 文档,在我看来,可选参数在 Scintilla 中“自然”不存在。

【问题讨论】:

  • 如果你只是想用另一个字符串替换一个字符串,你真的不需要做 python。 Notepad++ 搜索和替换可以很高兴地为您做到这一点。
  • 实际上比这更棘手,我需要替换的不是代码中出现的第一个术语,而是第二个术语。 (最后是第三个,第四个等。如果有的话)我也只需要替换第一个术语,但不需要替换后面的术语。 (这是一个不同的术语)
  • 你能举一个输入和输出文本的例子吗?感觉还是有一种更简单的方法来做到这一点。
  • 实际上这是一个很长的代码,但我想做的是将我从 MailChimp 获得的两个或多个不同的 html 代码放在一个头中。所以我需要保留第一个 、... 并删除下一个,然后我需要删除第一个 、... 并只保留最后一个。我希望你能得到我想要做的事情
  • 那么为什么不只是步骤1:使用查找和替换删除所有出现的<html></html><body></body>,然后步骤2:手动在顶部和底部插入一些标签?

标签: python notepad++ scintilla optional-arguments


【解决方案1】:

语法定义为[opt1 [opt2 [opt3]]] 而不是[opt1] [opt2] [opt3],这意味着您不能在不指定 opt1 和 2 的情况下使用 opt3。为什么不只提供适合您的标志、开始和结束位置的值?

我会尝试:

Editor.rereplace("matchRegex", "replaceWith",0,0,1,1)

地点:

Flags: 0
Start: 0
End: 1
MaxCount: 1

【讨论】:

  • 感谢您的帮助,但您的建议不起作用,因为我正在寻找的术语不在第一行。我现在要寻找一种方法来获取我的 html 代码中的代码行数,以使结束位置适用于我想要修改的每种类型的代码。
  • 无论如何我都试过 editor.rereplace("", "",0,1,editor.getLineCount(),1) 那不起作用我不知道为什么,也许是因为标志值? (我不明白那是什么)请注意,我没有在控制台中写入任何内容,因此它看起来工作正常,只是不会更改文本。注意:getlinecount 工作正常,我试过这个: y = editor.getLineCount() notepad.messageBox(str(y)) (消息框给我确切的代码行数)
  • > endPosition 是结束搜索的二进制位置。使用Editor.positionFromLine() 从(零索引)行号获取二进制位置。 npppythonscript.sourceforge.net/docs/latest/scintilla.html
  • 另外,如果您想在多行中搜索模式,您可能必须在标志中设置re.MULTILINE
  • 非常感谢您花时间帮助我,效果很好:) 我希望这个帖子可以帮助其他人
猜你喜欢
  • 2013-12-10
  • 2020-02-11
  • 2015-04-13
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2017-04-06
  • 1970-01-01
相关资源
最近更新 更多