我用记事本++做一些文字更换在5453行的语言文件。 该文件的行的格式为:
variable.name = Variable Value Over Here, that''s for sure, Really
双撇号是故意的。
我需要的值转换为句首字母大写,除非是在正确的并且应保持大写的单词“在这里”和“真”。 正如你所看到的,值范围内的情况下通常是混合的开始。
我已经为此工作了一小会儿。 所有到目前为止,我所得到的是:
(. )([A-Z])(.+)
这似乎至少选择合适的字符串。 更换一块就是我挣扎。
正则表达式替换不能在比赛执行功能(如大小写)。 你得脚本,例如PHP或JavaScript。
更新日期:见乔纳斯的回答 。
我给自己建所谓的Web页面的文本工具做那种事:
- 粘贴文本
- 进入“查找,正则表达式和替换”(或按下Ctrl + Shift + F)
- 输入您正则表达式(我会
^(.*?\=\s*\w)(.*)$
) - 勾选“^ $匹配行限制”选项
- 选择“应用JS功能匹配”
- 添加参数(第一个是匹配,则子图样),这里
s, start, rest
- 改变return语句
return start + rest.toLowerCase();
在文本区域的最终功能如下:
return function (s, start, rest) {
return start + rest.toLowerCase();
};
也许添加一些代码来利用一些话,如“真”和“这里”。
Find: (. )([A-Z])(.+)
Replace: \1\U\2\L\3
在记事本++ 6.0或更高(附带内置PCRE支持)。
在记事本+ +,你可以使用一个名为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,帮助”说明,包括“编辑器”对象下定义pymlsearch / pymlreplace功能所提供的所有功能。
当你准备要运行脚本,去你想让它先运行该文件,然后进入“脚本>”在Python脚本菜单和运行你的。
注意:虽然您可能能够使用记事本+ +的撤销功能,如果你陷入困境,那可能是一个好主意,把文本在另一个文件中第一次以验证它的工作原理。
PS可以“找到”和“标记”使用记事本++的正则表达式的每次出现内置查找对话框,如果你能选择他们都可以使用TextFX的‘Characters->大写的’功能对这个特定的问题,但我也不太清楚如何从标记或找到的文本选定文本去。 但是,我以为我会张贴此万一真有人...
编辑:在记事本++ 6.0或更高版本,可以使用“PCRE(Perl兼容的正则表达式)查找/替换”(来源: http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions )所以这可能已经使用像一个正则表达式来解决(. )([Az])(.+)
与像的替换参数\1\U\2\3
。
提问脑子里想的非常具体的情况。 作为一般的“更改为句首字母大写”在记事本++第一正则表达式的建议没有正常工作对我来说。 虽然并不完美,这里是这是我的目的,在原大的改进版本扭捏:
find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+)
replace: \1\U\2\L\3
你仍然有小写的名词,姓名,日期,国家等,但一个很好的拼写检查有问题可以与帮助。