我写了一个正则表达式,希望我能够将每个匹配(只有一个字符)替换为大写字符。我正在使用EditPad Pro(然而,我愿意使用任何其他工具,可以让我这样做,只要它是免费尝试,因为我只需要这样做一次)。

背景:我有一个区分大小写的应用程序使用的非常长的文本文件,一些单词以小写开头,而不是大写字符,从而导致应用程序崩溃。这将花费很长时间手工完成,并且如果没有正则表达式,这将非常复杂,因为(邪恶的)小写字符的出现是非常特定的。

我已经写了选择正则表达式,现在我可以使用一个反向引用($1工作就好),但我不能让它替换为大写字符。我认为像\u$1这样的东西可以工作,但是它在EditPad Pro中没有。

如果没有免费工具允许我这样做,我想另一种选择是用c#来做,但是我有点着急,没有编译器,所以我必须先下载快速版,所以……最好能找到支持这种特性的工具!

谢谢你!


TextPad将允许您执行此操作。

例子:

test this sentence

查找什么:\([^]*\)\(.*\) 替换为:\U\1\E \2

\U将导致后面所有字符都是大写的

E会关闭U

结果将是:

TEST this sentence

EditPad Pro和PowerGREP有一个 独特的功能,让你 更改反向引用的大小写。 \U1插入第一个反向引用 大写的\L1小写的和 \F1,第一个字符 大写,其余的用 小写的。最后,\I1插入它 每个单词的首字母 大写,其他字母 小写的。

资料来源:Goyvaerts, Jan(2006)。正则表达式:完整教程。Lulu.com。35页。ISBN 1411677609。谷歌书籍。检索于2010年6月25日。


您可以在jEdit中通过使用jEdit的find and replace对话框中的“返回BeanShell snippet的值”选项来完成此操作。只需搜索“[a-z]”并将其替换为“_0.toUpperCase()”(不含报价)


您还可以使用\I1和\I2等来大写匹配的第一个字母,而不是$1和$2。


我知道这个帖子是关于EditPad Pro的,但我来这里是因为我对javascript regexp有同样的需求。

对于这里需要相同技巧的人,您可以使用函数或lambda作为替换参数。

我使用下面的函数将css名称与-转换为javascript等效,例如,"border-top"将转换为"borderTop":

    s = s.replace(/\-[a-z]/g, x => x[1].toUpperCase());

notepad++(正则表达式搜索模式)的另一个用法示例

Find: (g|c|u|d)(et|reate|pdate|elete)_(.)([^\s (]+)
Replace: \U\1\E$2\U\3\E$4

例子:

get_user -> GetUser
create_user -> CreateUser
update_user -> UpdateUser
delete_user -> DeleteUser

对于javascript用户(我在这里来自javascript)检查这个答案https://stackoverflow.com/a/73776269/7668448

举例及参考资料

API

replace(
    regex,
    (matched, capture1, capture2, /*...,*/ capture_n, index, input_str) => transformed(/*...*/)
)
replace(
    regex: Regex,
    transformer: (matched: string, capture1: string, capture2: string, /*...,*/ capture_n: string, index: number, input_str: string) => string
) => string

检查例句的答案。将swc命令参数转换为驼峰大小写。