正则表达式改为判刑案件

时间:2009-06-24 15:49:15

标签: regex notepad++ case

我正在使用Notepad ++在5453行语言文件中进行一些文本替换。文件行的格式为:

variable.name = Variable Value Over Here, that''s for sure, Really

双撇号是故意的。

我需要将值转换为句子大小写,除了“Here”和“Really”这两个词是正确的并且应该保持大写。如您所见,值中的大小写通常是混合开始的。

我已经做了一段时间了。我到目前为止所有的一切是:

 (. )([A-Z])(.+)

似乎至少选择了正确的字符串。替换件是我正在努力的地方。

4 个答案:

答案 0 :(得分:152)

Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3

在Notepad ++ 6.0或更高版本中(内置PCRE支持)。

答案 1 :(得分:13)

正则表达式替换无法在匹配项上执行函数(如大小写)。你必须编写脚本,例如用PHP或JavaScript。

更新:请参阅Jonas' answer

我自己建了一个名为Text Utilities的网页来做这类事情:

  • 粘贴您的文字
  • 进入“查找,正则表达式和替换”(或按 Ctrl + Shift + F
  • 输入正则表达式(我的^(.*?\=\s*\w)(.*)$}
  • 检查“^ $匹配行限额”选项
  • 选择“将JS功能应用于匹配”
  • 添加参数(首先是匹配,然后是子模式),这里是s, start, rest
  • 将return语句更改为return start + rest.toLowerCase();

文本区域中的最终功能如下所示:

return function (s, start, rest) {
     return start + rest.toLowerCase();
};

也许添加一些代码来大写“Really”和“Here”等词。

答案 2 :(得分:6)

在Notepad ++中,您可以使用名为PythonScript的插件来完成这项工作。如果您安装了该插件,请创建一个新脚本,如下所示:

enter image description here

然后您可以使用以下脚本,根据需要替换正则表达式和函数变量:

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

小写名词,姓名,日期,国家等仍然存在问题,但是一个好的拼写检查程序可以帮助解决这个问题。