用小写字母替换大写字母

问题描述 投票:0回答:9

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

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

成为

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

在 Sublime Text 中。如何仅在同时包含小写和大写字母的单词中小写字母?这样它会影响

venUs
而不是
VENUS

sublimetext
9个回答
622
投票

您可以:

找到:

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

或选择文本,ctrl+K+L


214
投票

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

找到:

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

替换:

  • \L$1$2
    --> 将
    $1
    $2
    中的所有字母转换为小写
    但是
  • \l$1$2
    --> 只会将
    $1
    的第一个字母转换为小写,其他所有内容保持原样

对于大写字母

\U
\u

也是如此

122
投票

在使用像

[A-Z]
这样的正则表达式进行搜索之前,您应该按区分大小写的按钮(或Alt+C)(正如leemour很好地建议在接受的答案中进行编辑)。为了清楚起见,我留下了一些其他例子:

  1. 大写单词
  • 查找:
    (\s)([a-z])
    \s
    也匹配新行,即“venuS”=>“VenuS”)
  • 替换:
    $1\u$2
  1. 取消单词大写
  • 找到:
    (\s)([A-Z])
  • 替换:
    $1\l$2
  1. 删除 camel case(例如 cAmelCAse =>camelCase =>camelcase)
  • 找到:
    ([a-z])([A-Z])
  • 替换:
    $1\l$2
  1. 单词中的小写字母(例如 LowerCASe => 小写)
  • 找到:
    (\w)([A-Z]+)
  • 替换:
    $1\L$2
  • 替代替换:
    \L$0
  1. 单词中的大写字母(例如 upperCASe => uPPERCASE)
  • 找到:
    (\w)([A-Z]+)
  • 替换:
    $1\U$2
  1. 大写前一个(例如 upperCase => UPPERCase)
  • 找到:
    (\w+)([A-Z])
  • 替换:
    \U$1$2
  1. 前一个小写字母(例如 LOWERCase => lowerCase)
  • 找到:
    (\w+)([A-Z])
  • 替换:
    \L$1$2
  1. 其余部分大写(例如 upperCase => upperCASE)
  • 找到:
    ([A-Z])(\w+)
  • 替换:
    $1\U$2
  1. 其余部分小写(例如 LOWERCASE => lOwercase)
  • 找到:
    ([A-Z])(\w+)
  • 替换:
    $1\L$2
  1. 右移大写(例如 Case => case => casSe => casE)
  • 找到:
    ([a-z\s])([A-Z])(\w)
  • 替换:
    $1\l$2\u$3
  1. 左移大写(例如 CasE => CaSe => CAse => Case)
  • 找到:
    (\w)([A-Z])([a-z\s])
  • 替换:
    \u$1\l$2$3

关于问题(匹配至少有一个大写字母和一个小写字母的单词并将其变为小写),leemour的评论答案正确答案。只是为了澄清,如果只有一组需要替换,您可以在内部组中使用

?:
(即 非捕获组)或完全避免创建它们:

  • 查找:
    ((?:[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]+)

根据文档

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

但是,

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

2023-08-24 编辑

要结束更改字母大小写,请使用

\E

  • 替换:
    $1\L$2\E$3
    (例如
    (ABC)(ABC)(ABC)
    =>
    ABCabcABC

5
投票
  • 找到:
    (\u)

  • 更换:
    \L$1$2

在Notepad++中确认操作。
不要忘记选中“匹配案例”框。


4
投票

试试这个

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

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


4
投票

正则表达式

查找

\w+

更换

\L$0

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

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

$0
捕获群组


2
投票

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

搜索任意值:

<a id="(?P<x>.*?)"></a>
替换为相同的小写字母:
<a id="\L\P<x>\E"></a>

曾经:

<a id="VALUE"></a>
变成:
<a id="value"></a>


2
投票

要转换

snake_case
单词以及一些以
_
开头的附加字段:

示例:

_id
user_name

id
userName

先使用:

  • 查找:(\w)_(\w)
  • 更换:$1\U$2

然后,只需将

"_"
替换为
""
(空格)


0
投票
splitText = re.sub(r'[^\w\s]', lambda x: x.group() + '*', text).split('* ')
return splitText.replace('*', '')

这使用正则表达式 (

import re
),然后删除剩余的星号。如果只需要使用句尾问号,请将
r'[^\w\s]'
替换为
r'[.?!]'

© www.soinside.com 2019 - 2024. All rights reserved.