我正在使用Notepad ++在5453行语言文件中进行一些文本替换。文件行的格式为:
variable.name = Variable Value Over Here, that''s for sure, Really
双撇号是故意的。
我需要将值转换为句子大小写,除了“Here”和“Really”这两个词是正确的并且应该保持大写。如您所见,值中的大小写通常是混合开始的。
我已经做了一段时间了。我到目前为止所有的一切是:
(. )([A-Z])(.+)
似乎至少选择了正确的字符串。替换件是我正在努力的地方。
答案 0 :(得分:152)
Find: (. )([A-Z])(.+)
Replace: \1\U\2\L\3
在Notepad ++ 6.0或更高版本中(内置PCRE支持)。
答案 1 :(得分:13)
正则表达式替换无法在匹配项上执行函数(如大小写)。你必须编写脚本,例如用PHP或JavaScript。
更新:请参阅Jonas' answer。
我自己建了一个名为Text Utilities的网页来做这类事情:
^(.*?\=\s*\w)(.*)$
} s, start, rest
return start + rest.toLowerCase();
文本区域中的最终功能如下所示:
return function (s, start, rest) {
return start + rest.toLowerCase();
};
也许添加一些代码来大写“Really”和“Here”等词。
答案 2 :(得分: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)
这个特定的例子通过查找特定行中的所有匹配,然后每个匹配应用函数来工作。如果您需要多行支持,Python脚本“Conext-Help”将解释所有提供的功能,包括在'editor'对象下定义的pymlsearch / pymlreplace函数。
当您准备好运行脚本时,请先转到您希望它运行的文件,然后转到“脚本>”在Python Script菜单中运行你的。
注意:虽然你可能会使用notepad ++的撤消功能,但如果你搞砸了,最好先将文本放在另一个文件中以验证它的工作原理。
P.S。您可以使用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
。
答案 3 :(得分:3)
提问者心中有一个非常具体的案例。 作为一般"改为判刑案件"在记事本++中 第一个正则表达式建议对我来说不正常。 虽然不完美,但这是一个经过调整的版本 为了我的目的,原版是一个很大的改进:
find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+)
replace: \1\U\2\L\3
小写名词,姓名,日期,国家等仍然存在问题,但是一个好的拼写检查程序可以帮助解决这个问题。