正则表达式用小写字母替换大写


220

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

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

变成

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

在崇高文字中。如何仅在同时包含大写和小写字母的单词中对字母进行小写?因此它影响venUs而不是VENUS

Answers:


393

你可以:

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

或选择文本,ctrl+ K+ L


7
超。很有用。您能否指向一些列出像'\ L'这样的转换的资源?
Codious-JR

17
Sublime使用Boost对其RegEx进行支持,这些文档是\ L格式字符串的文档:boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex / ...
Alex K.

4
而在的IntelliJ
帕特里克

11
注意:要大写,您需要\U
takanuva15 '18

2
要仅小写单个参数,请在其后加上\ E以结束小写部分: $1\L$2\E$3
Michael

129

我认为这对其他人也可能很方便:

找:

  • ([A-Z])(.*)

更换:

  • \L$1$2- >将所有字母转换成$1$2为小写
    BUT
  • \l$1$2->仅将的第一个字母转换$1为小写,而其他所有内容保持不变

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


7
\l$1$2只会使整个$1在这种情况下,这里较低的情况下,因为$i只包含一个字母。\l=>首个字母转换为小写字母,并且\u=>首个字母转换为大写字母。凡\U\I做给所有后续字母。
2015年

5
请注意,\E终止\L\U序列。
Ludovic Kuty

77

在使用regex之类的进行搜索之前[A-Z],您应按区分大小写的按钮(或Alt+ C)(因为leemour很好地建议在接受的答案中进行编辑)。为了清楚起见,我将留下其他一些示例:

  1. 大写单词
    • 试求:(\s)([a-z])\s也匹配新行,即,“金星” =>“金星”)
    • 更换: $1\u$2
  2. 取消大写
    • 找: (\s)([A-Z])
    • 更换: $1\l$2
  3. 删除骆驼案(例如cAmelCAse => camelcAse => camelcase)
    • 找: ([a-z])([A-Z])
    • 更换: $1\l$2
  4. 单词内的小写字母(例如LowerCASe =>小写)
    • 找: (\w)([A-Z]+)
    • 更换: $1\L$2
    • 备用替换: \L$0
  5. 单词中的大写字母(例如,upperCASe => uPPERCASE)
    • 找: (\w)([A-Z]+)
    • 更换: $1\U$2
  6. 大写上一个字母(例如,upperCase => UPPERCase)
    • 找: (\w+)([A-Z])
    • 更换: \U$1$2
  7. 小写字母(例如LOWERCase => lowerCase)
    • 找: (\w+)([A-Z])
    • 更换: \L$1$2
  8. 大写其余部分(例如,upperCase => upperCASE)
    • 找: ([A-Z])(\w+)
    • 更换: $1\U$2
  9. 小写其余部分(例如,小写=>小写)
    • 找: ([A-Z])(\w+)
    • 更换: $1\L$2
  10. 右移大写(例如Case => cAse => caSe => casE)
    • 找: ([a-z\s])([A-Z])(\w)
    • 更换: $1\l$2\u$3
  11. 左移大写(例如,CasE => CaSe => CAse => Case)
    • 找: (\w)([A-Z])([a-z\s])
    • 更换: \u$1\l$2$3

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

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

2016-06-23编辑

泰勒建议通过编辑此答案为#4替换查找表达式:

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

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

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


2

正则表达式

查找\w+

更换\L$0

Sublime Text使用Boost库中的Perl兼容正则表达式(PCRE)引擎来增强搜索面板中的正则表达式。

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

$0 捕获组


请提供完整的答案,而不仅仅是没有解释的代码答案。
petezurich

1

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

搜索任何值:<a id="(?P<x>.*?)"></a> 用小写字母替换:<a id="\L\P<x>\E"></a>

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


0

试试这个

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

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


那不行 它匹配2个以上大写字母。但我知道这\L是小写的。我更新了问题。
leemour
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.