题
我使用的记事本++做一些文字替换在5453行语言的文件。该格式的文件的行为:
variable.name = Variable Value Over Here, that''s for sure, Really
双撇是故意的。
我需要的值转换判刑的情况下,除了一句"这里"和"真正",这是适当的和应该保持资本化。正如你可以看到,这种情况下在价值通常是混合的开始。
我曾在这一小会儿。所有我有这么远是:
(. )([A-Z])(.+)
这似乎至少有选择适当的弦。替换片是我在苦苦挣扎。
解决方案
正则表达式替换无法对匹配项执行函数(如大写)。你必须编写脚本,例如在 PHP 或 JavaScript 中。
更新: 看 乔纳斯的回答.
我自己建立了一个网页,名为 文本实用程序 做这类事情:
- 粘贴您的文字
- 进入“查找、正则表达式和替换”(或按 控制键+转移+F)
- 输入你的正则表达式(我的是
^(.*?\=\s*\w)(.*)$
) - 检查“^$匹配行限制”选项
- 选择“将 JS 函数应用于匹配”
- 添加参数(首先是匹配,然后是子模式),在这里
s, start, rest
- 将返回语句更改为
return start + rest.toLowerCase();
文本区域中的最终函数如下所示:
return function (s, start, rest) {
return start + rest.toLowerCase();
};
也许添加一些代码来大写一些单词,例如“Really”和“Here”。
其他提示
Find: (. )([A-Z])(.+)
Replace: \1\U\2\L\3
在记事本++ 6.0或更好(随内置 PCRE 支持)。
在记事本++可以使用一个插件称为PythonScript做的工作。如果你安装的插件,创建一个新的脚本,像这样:
然后你可以用下面脚本,取代regex和功能的变量,如你看到适合:
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)
这个特定例子中的作品找到所有的比赛中一个特别的线,然后应用该功能每个匹配。如果你需要多支助,蟒蛇脚本"Conext-帮助"解释所有功能的提供,包括pymlsearch/pymlreplace职能下定义'的编辑'的对象。
当你准备运行你的脚去到你想要的文件,它为运行在第一次,然后去"脚本>"在Python菜单脚本和运行你的。
注: 虽然你或许可以使用的记事本++'s撤消的功能如果你搞砸了,它可能是一个好主意来把该案文在另一个文件的第一个验证它的工作。
P.S.你可以'发现'和'标记每生一个定期表达的使用记事本++'s built-in找到对话,如果你能选择他们所有你可以使用TextFX的"字->上情况"的功能,用于这一特定问题,但我不知道该如何去何从的标记或发现的文本对选定的文本。但是,我想我会后这种情况下,任何人都不会...
编辑: 在记事本++6.0或更高,可以使用"PCRE(Perl Compatible Regular Expression)搜索/替换"(资料来源: http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions)使这可能已经解决使用regex喜欢 (. )([A-z])(.+)
一个替代的论点像 \1\U\2\3
.
在提问心目中一个非常具体的情形。 作为一般的“更改为句首字母大写”在记事本++ 第一个正则表达式的建议并没有为我正常工作。 虽然并不完美,这里是一个扭捏的版本, 是在原有的一大进步,我的目的:
find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+)
replace: \1\U\2\L\3
您仍然有一个问题,小写的名词,姓名,日期,国家等,但一个好的拼写检查器可以与帮助。