用小写字母替换大写

Posted

技术标签:

【中文标题】用小写字母替换大写【英文标题】:Replace uppercase with lowercase letters 【发布时间】:2014-01-11 14:03:15 【问题描述】:

我正在尝试使用正则表达式将大写字母替换为相应的小写字母。 这样

EarTH:   1,
MerCury: 0.2408467,
venuS:   0.61519726,

变成

earth:   1,
mercury: 0.2408467,
venus:   0.61519726,

在崇高的文本中。如何仅在包含小写和大写字母的单词中小写字母?这样它会影响venUs 而不是VENUS

【问题讨论】:

【参考方案1】:

你可以:

查找:(\w) 替换为:\L$1

或者选择文字,ctrl+K+L

【讨论】:

超级。很有用。您能否指出一些列出诸如 '\L' 之类的转换的资源? Sublime 使用 Boost 来支持正则表达式,这些是格式字符串的文档,例如 \L: boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/… 在 IntelliJ 中 注意:要转为大写,您需要\U 若要仅小写单个参数,请将 \E 放在其后以结束小写部分:$1\L$2\E$3【参考方案2】:

我认为这对其他人也可能派上用场:

找到:

([A-Z])(.*)

替换:

\L$1$2 --> 将 $1$2 中的所有字母转换为小写BUT \l$1$2 --> 只会将$1 的第一个字母转换为小写,其余的保持原样

\U\u 的大写字母也是如此

【讨论】:

\l$1$2 在这种情况下只会使整个$1 小写,因为$i 只包含一个字母。 \l => 后面的第一个字母为小写,\u => 后面的第一个字母为大写。其中\U\I 对以下所有字母进行处理。 请注意,\E 会终止 \L\U 序列。【参考方案3】:

在使用[A-Z] 之类的正则表达式进行搜索之前,您应该按区分大小写的按钮(或Alt+C)(如@987654321 @ 在接受的答案中进行编辑)。为了清楚起见,我将留下一些其他示例:

    Capitalize的话 查找:(\s)([a-z])\s 也匹配新行,即“venuS”=>“VenuS”) 替换:$1\u$2 取消大写单词 查找:(\s)([A-Z]) 替换:$1\l$2 删除camel case(例如 cAmelCAse => camelcAse => camelcase) 查找:([a-z])([A-Z]) 替换:$1\l$2 单词中的小写字母(例如 LowerCASe => 小写) 查找:(\w)([A-Z]+) 替换:$1\L$2 替代替换:\L$0 单词中的大写字母(例如 upperCASe => uPPERCASE) 查找:(\w)([A-Z]+) 替换:$1\U$2 上一个大写(例如,大写 => 大写) 查找:(\w+)([A-Z]) 替换:\U$1$2 前一个小写(例如 LOWERCase => lowerCase) 查找:(\w+)([A-Z]) 替换:\L$1$2 其余部分大写(例如 upperCase => upperCASE) 查找:([A-Z])(\w+) 替换:$1\U$2 其余部分小写(例如 LOWERCASE => lOwercase) 查找:([A-Z])(\w+) 替换:$1\L$2 Shift-right-uppercase(例如 Case => cAse => caSe => caseE) 查找:([a-z\s])([A-Z])(\w) 替换:$1\l$2\u$3 Shift-left-uppercase(例如,CasE => CaSe => CAse => Case) 查找:(\w)([A-Z])([a-z\s]) 替换:\u$1\l$2$3

关于问题(匹配至少有一个大写和一个小写字母的单词并将它们变为小写),leemour's comment-answer 是正确答案。澄清一下,如果只有一组要替换,您可以在内部组中使用?:(即non capture groups)或完全避免创建它们:

查找:((?:[a-z][A-Z]+)|(?:[A-Z]+[a-z]))([a-z][A-Z]+|[A-Z]+[a-z]) 替换:\L$1

2016-06-23 编辑

Tyler 通过编辑此答案建议 #4 的替代查找表达式:

(\B)([A-Z]+)

根据documentation,\B 将查找不在单词边界的字符(即不在开头也不在结尾)。您可以使用 全部替换 按钮,它的作用与使用 (\w)([A-Z]+) 作为查找表达式完全相同。

然而,\B 的缺点是它不允许单个替换,这可能是由于 find 的“非边界”限制(如果您知道确切原因,请进行编辑)。

【讨论】:

【参考方案4】:

正则表达式

查找\w+

替换\L$0

Sublime Text 使用 Perl 兼容正则表达式 (PCRE) 来自 Boost 库的引擎,用于支持搜索中的正则表达式 面板。

\L 将所有内容转换为小写

$0捕获组

【讨论】:

【参考方案5】:

试试这个

查找:([A-Z])([A-Z]+)\b 替换:$1\L$2

确保启用区分大小写 (Alt + C)

【讨论】:

那行不通。它匹配 2+ 个大写字母。但我知道\L 是小写字母。我更新了问题。【参考方案6】:

在 BBEdit 中可以这样工作(例如:将 ID 值更改为小写):

搜索任意值:<a id="(?P<x>.*?)"></a> 替换为相同的小写:<a id="\L\P<x>\E"></a>

原为:<a id="VALUE"></a> 成为:<a id="value"></a>

【讨论】:

以上是关于用小写字母替换大写的主要内容,如果未能解决你的问题,请参考以下文章

恺撒加密

SHELL 中英文字母大小写转换

shell 整理(26)===大小写字母替换和随机取出一个奇数

是否有用于反向引用的大写/小写版本的正则表达式替换术语? [复制]

用大写字母替换“-”[关闭]

oracle 11g replace替换问题