【问题标题】: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

【问题讨论】:

    标签: sublimetext


    【解决方案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 @ 在接受的答案中进行编辑)。为了清楚起见,我将留下一些其他示例:

    1. Capitalize的话
      • 查找:(\s)([a-z])\s 也匹配新行,即“venuS”=>“VenuS”)
      • 替换:$1\u$2
    2. 取消大写单词
      • 查找:(\s)([A-Z])
      • 替换:$1\l$2
    3. 删除camel case(例如 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. 上一个大写(例如,大写 => 大写)
      • 查找:(\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. 其余部分小写(例如 LOWERCASE => lOwercase)
      • 查找:([A-Z])(\w+)
      • 替换:$1\L$2
    10. Shift-right-uppercase(例如 Case => cAse => caSe => caseE)
      • 查找:([a-z\s])([A-Z])(\w)
      • 替换:$1\l$2\u$3
    11. 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>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-20
          • 1970-01-01
          • 2013-02-04
          • 1970-01-01
          • 2019-06-06
          • 2011-12-18
          相关资源
          最近更新 更多