如何使用正则表达式将大写字母替换为小写字母?

31

我需要将变量名中的大写字母替换为小写字母并添加空格

例如:

NotImplementedException 应该变为 Not implemented exception UnhandledException 应该变为 Unhandled exception


3
用什么编程语言?大多数情况下,仅使用正则表达式是不足以做到这一点的,你需要在出现的情况下运行一些代码。 - instanceof me
语言是C#,但我需要正则表达式 :( - aron
1
你需要使用正则表达式的特定原因吗?大多数情况下,人们问这种问题时,他们对所需答案的类型做出了假设。 - Andrew Aylett
因为正则表达式是配置参数,系统正在运行,我需要在不安装新版本的情况下完成这个任务。 - aron
1
@AndrewAylett 这个问题对我有用(虽然没有实际答案)因为我正在使用VS搜索/替换,它使用相同的正则表达式。这将避免大量的“重复查找、转换大小写”按键序列。 - ClickRick
3个回答

52

由于您没有指定语言,我将以C#为例。 我相信您的语言也会提供类似的东西。

String s = "NotImplementedException";
s = Regex.Replace(s, @"\B[A-Z]", m => " " + m.ToString().ToLower());
// s = "Not implemented exception"

5
这个答案的更好的 C# 版本,可以支持任何大写字母(甚至是带重音符号的),将是:String s = "NotImplementedException"; s = Regex.Replace(s, @"\B\p{Lu}", m => " " + m.ToString().ToLower()); - A. M.

1

可以使用单个sed命令完成:

$ echo "NotImplementedException" | sed 's/\B[A-Z]/ \l&/g'
Not implemented exception

但是在不同的编程语言中,对于\l(以及\u\L\U\E)的支持很少见。我只确定 Perl 已经实现了这个功能。

同意:我所知道的正则表达式中,\L、\U等是唯一的方法,但像你说的那样,这种情况相当罕见。我只在JGSoft产品和Perl中注意到过它:echo "NotImplementedException" | perl -pe 's/(\B[A-Z])/ \l$1/g' - Dewi Morgan

-7

@Ignacio,我不同意。当然,这不是可以用普通正则表达式一条语句完成的事情。但是sed命令:

sed -e 's/\([a-zA-Z]\)C/\1 c/g' infile.txt

当“C”紧跟在一个字母之后时,将替换所有出现的“C”为“ c”。 所有OP需要做的就是制作26个变体,这可能是繁琐的。 而且很难确定更改大小写的条件,但对于全局搜索和替换使用正则表达式总是如此。


5
这是一个认真的回答,还是你只是在与伊格纳西奥争论? - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接