【问题标题】:Regex to change to sentence case正则表达式更改为句子大小写
【发布时间】:2009-06-24 15:49:14
【问题描述】:

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

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

双撇号是故意的。

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

我已经为此工作了一段时间。到目前为止,我得到的只是:

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

这似乎至少选择了正确的字符串。替换件是我苦苦挣扎的地方。

【问题讨论】:

  • 为什么“这里”和“真的”合适?

标签: regex notepad++ case


【解决方案1】:
Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3

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

【讨论】:

  • 哦,哇,我想要这样的东西很久了。谢谢!!
  • 我将添加 \u 大写只是匹配的第一个字符。同样\l 只会将第一个字符小写。
  • 这应该是答案。
  • 如果您使用的是 \U 和 \L 命令,您也可以使用 \E 来结束它们。因此,例如,如果您只想更改替换字符串的一部分而不是全部 if,您可以在要更改其大小写的位的末尾放置一个 \E。
  • 需要注意的是,至少在 6.9.1 版本中,\U 和 \L(以及 \u、\l)命令不转换重音字母,只有 ASCII 大写/小写字母。
【解决方案2】:

正则表达式替换无法在匹配项上执行功能(如大写)。你必须编写脚本,例如在 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”之类的单词大写。

【讨论】:

  • 感谢 streetpc 的帮助。在 Notepad++ 中,我可以使用 suh-weet 的正则表达式应用替换功能。再说一次,您的网站也很受欢迎。除非我在可变部分中有一个新句子,否则这几乎可以解决这个问题,但我可以通过找到“。[a-z]”并在句点-空间组合后的第一个字母上修复大小写来解决这个问题。我将把这个问题留一点,看看是否有 Notepad++ 的人回应,但你肯定解决了我的问题。谢谢!
  • nedit 也可以通过其正则表达式搜索和替换来做到这一点。
【解决方案3】:

在 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”解释了提供的所有函数,包括在“编辑器”对象下定义的 pymlsearch/pymlreplace 函数。

当您准备好运行脚本时,请先转到您希望在其上运行的文件,然后转到 Python 脚本菜单中的“脚本 >”并运行您的脚本。

注意:如果您搞砸了,您可能可以使用 notepad++ 的撤消功能,但最好先将文本放在另一个文件中以验证其是否有效。

附:您可以使用 notepad++ 的内置查找对话框“查找”和“标记”每一个正则表达式的出现,如果您可以选择它们,您可以使用 TextFX 的“字符->大写”功能来解决这个特定问题,但我我不确定如何从标记或找到的文本转到选定的文本。但是,我想我会发布这个,以防有人这样做......

编辑: 在 Notepad++ 6.0 或更高版本中,您可以使用“PCRE(Perl 兼容正则表达式)搜索/替换”(来源:http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions)所以这可以使用正则表达式解决(. )([A-z])(.+) 与 \1\U\2\3 之类的替换参数。

【讨论】:

  • 对于那些寻找 PCRE 搜索和替换语法(包括大小写转换等)的良好参考的人,您可以查看这个 Perldoc 站点:perldoc.perl.org/perlre.html -- 我找不到任何记录了 \U 等内容的其他位置!
【解决方案4】:

提问者想到了一个非常具体的案例。 作为记事本++中的一般“更改为句子大小写” 第一个正则表达式建议对我不起作用。 虽然不完美,但这是一个经过调整的版本 就我的目的而言,是对原版的重大改进:

find:    ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+) 
replace: \1\U\2\L\3

您仍然对小写名词、名称、日期、国家等有疑问,但一个好的拼写检查器可以帮助解决这个问题。

【讨论】:

  • 谢谢! \U 为我工作。我需要将一堆变量名从下划线更改为驼峰式,然后在崇高的情况下我搜索了表达式 (.+)_(.+) (
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 2019-05-06
  • 2018-01-19
  • 2011-02-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多