正则表达式改为判刑案件

jkr*_*amp 40 regex case notepad++

我正在使用Notepad ++在5453行语言文件中进行一些文本替换.文件行的格式为:

variable.name = Variable Value Over Here, that''s for sure, Really
Run Code Online (Sandbox Code Playgroud)

双撇号是故意的.

我需要将值转换为句子大小写,除了"Here"和"Really"这两个词是正确的并且应该保持大写.如您所见,值中的大小写通常是混合开始的.

我已经做了一段时间了.我到目前为止所有的是:

 (. )([A-Z])(.+)
Run Code Online (Sandbox Code Playgroud)

这似乎至少选择了正确的字符串.替换件是我在努力的地方.

Jon*_*röm 157

Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3
Run Code Online (Sandbox Code Playgroud)

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

  • 我将添加'\ u`大写只是匹配的第一个字符.同样`\ l`将小写第一个字符. (26认同)
  • 如果使用\ U和\ L命令,也可以使用\ E结束它们.因此,例如,如果您只想更改替换字符串的一部分而不是全部if,那么您应该将\ E放在要更改其大小写的位的末尾. (22认同)
  • 这应该是答案. (9认同)
  • 我认为这应该是被接受的. (4认同)
  • 应该注意的是,至少在版本6.9.1中,\ U和\ L(和\ u,\ l)命令不会转换重音字母,只能转换ASCII大写/小写字母. (4认同)
  • 哇,我已经想要这么长时间了.谢谢!! (2认同)
  • 应该是答案 (2认同)

ins*_* me 13

正则表达式替换不能在匹配项上执行函数(如大小写).你必须编写脚本,例如在PHP或JavaScript中.

更新:Jonas的回答.

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

  • 粘贴你的文字
  • 进入"查找,正则表达和替换"(或按Ctrl+ Shift+ F)
  • 进入你的正则表达式(我的将是^(.*?\=\s*\w)(.*)$)
  • 检查"^ $匹配行限制"选项
  • 选择"将JS函数应用于匹配"
  • 在这里添加参数(首先是匹配,然后是子模式) s, start, rest
  • 将return语句更改为 return start + rest.toLowerCase();

文本区域中的最终功能如下所示:

return function (s, start, rest) {
     return start + rest.toLowerCase();
};
Run Code Online (Sandbox Code Playgroud)

也许添加一些代码来大写"Really"和"Here"等词.


ato*_*tom 6

在Notepad ++中,您可以使用名为PythonScript的插件来完成这项工作.如果您安装了插件,请创建一个新脚本,如下所示:

在此输入图像描述

然后,您可以使用以下脚本,根据需要替换正则表达式和函数变量:

import re

#change these
regex = r"[a-z]+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)
Run Code Online (Sandbox Code Playgroud)

这个特定的例子通过查找特定行中的所有匹配,然后每个匹配应用函数来工作.如果您需要多行支持,Python脚本"Conext-Help"将解释所有提供的功能,包括在'editor'对象下定义的pymlsearch/pymlreplace函数.

当您准备好运行脚本时,首先转到您希望它运行的文件,然后转到Python Script菜单中的"Scripts>"并运行您的脚本.

注意:如果你搞砸了,你可能会使用notepad ++的撤销功能,但最好先将文本放在另一个文件中以验证它的工作原理.

PS你可以使用notepad ++的内置查找对话框"找到"并"标记"每个正则表达式,如果你可以选择它们,你可以使用TextFX的"Characters-> UPPER CASE"功能来解决这个问题,但是我我不确定如何从标记或找到的文本转到选定的文本.但是,我想我会发布这个以防任何人做...

编辑:在Notepad ++ 6.0或更高版本中,您可以使用"PCRE(Perl兼容正则表达式)搜索/替换"(来源:http://sourceforge.net/apps/mediawiki/notepad-plus/? title = Regular_Expressions )这样就可以了已使用正则表达式解决,如(. )([A-z])(.+)替换参数,如\1\U\2\3.