正则expression式换句话
我正在使用Notepad ++在5453行的语言文件中进行文本replace。 文件行的格式是:
variable.name = Variable Value Over Here, that''s for sure, Really
双撇号是故意的。
除了“Here”和“Really”这两个字是合适的,并且应该保持大写字母之外,我需要把这个值转换成判例。 正如你所看到的,价值范围内的情况通常是混合在一起的。
我已经为此工作了一段时间。 我到目前为止所有的是:
(. )([AZ])(.+)
这似乎至lessselect了适当的string。 更换的一块是我奋斗的地方。
正则expression式replace不能在匹配上执行函数(比如大写)。 你必须脚本,例如在PHP或JavaScript。 也许另一个编辑器可以让你做到这一点,我还没有看到这个function。 更新:见乔纳斯的答案。
我为自己build立了一个名为Text Utilities的网页来做这样的事情:
- 粘贴你的文字
- 进入“查找,正则expression式和replace”(或按Ctrl + Shift + F )
- input你的正则expression式(我的将是
^(.*?\=\s*\w)(.*)$
) - 检查“^ $匹配行限制”选项
- select“应用JSfunction匹配”
- 添加参数(首先是匹配,然后是子模式),在这里
s, start, rest
- 改变return语句
return start + rest.toLowerCase();
文本区域的最终function如下所示:
return function (s, start, rest) { return start + rest.toLowerCase(); };
也许添加一些代码来大写一些词如“真正”和“这里”。
Find: (. )([AZ])(.+) Replace: \1\U\2\L\3
在Notepad ++ 6.0或更高版本(内置PCRE支持)。
在Notepad ++中,您可以使用名为PythonScript的插件来完成这项工作。 如果你安装插件,像这样创build一个新的脚本:
然后你可以使用下面的脚本,根据你的需要replace正则expression式和函数variables:
import re #change these regex = r"[az]+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”解释了提供的所有function,包括在“编辑器”对象下定义的pymlsearch / pymlreplace函数。
当你准备好运行你的脚本时,先转到你想运行它的文件,然后进入Python Script菜单中的“Scripts>”并运行你的脚本。
注意:虽然如果你搞砸了,你可能会使用记事本++的撤销function,但是最好先把文本放在另一个文件中来validation它的效果。
PS你可以使用notepad ++的内置查找对话框来查找和标记每一个正则expression式的出现,如果你可以select它们,你可以使用TextFX的“Characters-> UPPER CASE”function来解决这个问题,但是我不知道如何从标记或find的文本到选定的文本。 但是,我想我会张贴这个以防万一…
编辑:在记事本+ + 6.0或更高,您可以使用“PCRE(Perl兼容正则expression式)search/replace”(来源: http : //sourceforge.net/apps/mediawiki/notepad-plus/? title=Regular_Expressions) (. )([Az])(.+)
的正则expression式用replace参数(如\1\U\2\3
。
提问者有一个非常具体的例子。 作为一个记事本++一般的“更改为判例”,第一个正则expression式的build议对我来说是不正确的。 虽然不完美,但这里是一个经过改进的版本,对于我的目的来说是一个很大的改进:
find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+) replace: \1\U\2\L\3
小写名字,名字,date,国家等等仍然存在问题,但是一个好的拼写检查程序可以帮助你。