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支持).
ins*_* me 13
正则表达式替换不能在匹配项上执行函数(如大小写).你必须编写脚本,例如在PHP或JavaScript中.
更新:见Jonas的回答.
我自己构建了一个名为Text Utilities的网页来做这样的事情:
^(.*?\=\s*\w)(.*)$
)s, start, rest
return start + rest.toLowerCase();
文本区域中的最终功能如下所示:
return function (s, start, rest) {
return start + rest.toLowerCase();
};
Run Code Online (Sandbox Code Playgroud)
也许添加一些代码来大写"Really"和"Here"等词.
在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
.