正则expression式换句话

我正在使用Notepad ++在5453行的语言文件中进行文本replace。 文件行的格式是:

variable.name = Variable Value Over Here, that''s for sure, Really 

双撇号是故意的。

除了“Here”和“Really”这两个字是合适的,并且应该保持大写字母之外,我需要把这个值转换成判例。 正如你所看到的,价值范围内的情况通常是混合在一起的。

我已经为此工作了一段时间。 我到目前为止所有的是:

  (. )([AZ])(.+) 

这似乎至lessselect了适当的string。 更换的一块是我奋斗的地方。

正则expression式replace不能在匹配上执行函数(比如大写)。 你必须脚本,例如在PHP或JavaScript。 也许另一个编辑器可以让你做到这一点,我还没有看到这个function。 更新:见乔纳斯的答案。

我为自己build立了一个名为Text Utilities的网页来做这样的事情:

  • 粘贴你的文字
  • 进入“查找,正则expression式和replace”(或按Ctrl + Shift + F
  • input你的正则expression式(我的将是^(.*?\=\s*\w)(.*)$
  • 检查“^ $匹配行限制”选项
  • select“应用JSfunction匹配”
  • 添加参数(首先是匹配,然后是子模式),在这里s, start, rest
  • 改变return语句return start + rest.toLowerCase();

文本区域的最终function如下所示:

 return function (s, start, rest) { return start + rest.toLowerCase(); }; 

也许添加一些代码来大写一些词如“真正”和“这里”。

 Find: (. )([AZ])(.+) Replace: \1\U\2\L\3 

在Notepad ++ 6.0或更高版本(内置PCRE支持)。

在Notepad ++中,您可以使用名为PythonScript的插件来完成这项工作。 如果你安装插件,像这样创build一个新的脚本:

在这里输入图像说明

然后你可以使用下面的脚本,根据你的需要replace正则expression式和函数variables:

 import re #change these regex = r"[az]+sym" function = str.upper def perLine(line, num, total): for match in re.finditer(regex, line): if match: s, e = match.start(), match.end() line = line[:s] + function(line[s:e]) + line[e:] editor.replaceWholeLine(num, line) editor.forEachLine(perLine) 

这个特定的例子通过查找特定行中的所有匹配,然后应用每个匹配的函数来工作。 如果您需要多行支持,Python脚本“Conext-Help”解释了提供的所有function,包括在“编辑器”对象下定义的pymlsearch / pymlreplace函数。

当你准备好运行你的脚本时,先转到你想运行它的文件,然后进入Python Script菜单中的“Scripts>”并运行你的脚本。

注意:虽然如果你搞砸了,你可能会使用记事本++的撤销function,但是最好先把文本放在另一个文件中来validation它的效果。

PS你可以使用notepad ++的内置查找对话框来查找和标记每一个正则expression式的出现,如果你可以select它们,你可以使用TextFX的“Characters-> UPPER CASE”function来解决这个问题,但是我不知道如何从标记或find的文本到选定的文本。 但是,我想我会张贴这个以防万一…

编辑:在记事本+ + 6.0或更高,您可以使用“PCRE(Perl兼容正则expression式)search/replace”(来源: http : //sourceforge.net/apps/mediawiki/notepad-plus/? title=Regular_Expressions) (. )([Az])(.+)的正则expression式用replace参数(如\1\U\2\3

提问者有一个非常具体的例子。 作为一个记事本++一般的“更改为判例”,第一个正则expression式的build议对我来说是不正确的。 虽然不完美,但这里是一个经过改进的版本,对于我的目的来说是一个很大的改进:

 find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+) replace: \1\U\2\L\3 

小写名字,名字,date,国家等等仍然存在问题,但是一个好的拼写检查程序可以帮助你。