【问题标题】:Uppercase to Propercase大写字母转大写字母
【发布时间】:2017-08-03 05:30:09
【问题描述】:

我有一个正在使用 notepad++ 编辑的 xml 文档

name="TEXT"
name="TEXT2"

任何人都可以通过命令/查找和替换来帮助将 name="" 中的所有内容转换为 Propercase

期望的结果

name="Text"
name="Text2"

我无法将整个 xml 编辑为正确的大小写

【问题讨论】:

    标签: regex xml notepad++ uppercase find-replace


    【解决方案1】:

    你可以匹配正则表达式

    name="([a-zA-Z])(\w*)
    

    替换成

    name="\U\1\L\2
    

    你可以在这里找到一个例子 https://regex101.com/r/U6F3Dc/1/

    【讨论】:

    • 这种作品,无论如何它搜索整个“”因为它只是改变第一部分,即约翰史密斯到约翰史密斯,无论如何也要在正则表达式中包含数字以及约翰史密斯2
    • 您可以将 name="(\w*\s)*([a-zA-Z])(\w*) 替换为 name="\1\U\2\L\3在后续步骤中
    • 这似乎只是将他的 Smith Part of JOHN SMITH 更改为 JOHN Smith,所以我们快到了
    • 另外一个问题,如果名称是 3 个字母长,如 JOHN SMITH CARTER,它会删除 JOHN 并用 SMITH Carter 替换它
    【解决方案2】:

    使用 Ctrl+Alt+鼠标左键单击要正确大小写的文本

    在你的情况下,从第 6 列到行尾

    编辑 -> 将大小写转换为 -> 正确

    Alt +U 
    

    【讨论】:

    • 这只会做突出显示的文本我需要一个搜索的命令并且只做 name= 字段,已经尝试过你的建议,谢谢
    • 您可以使用 Ctrl+Alt+鼠标左键单击要正确大小写的文本,然后单击 Alt+U
    • 我会先给它,但有数百个 name= 大写字段,如果可能的话,我更喜欢自动命令
    【解决方案3】:
    • Ctrl+H
    • 查找内容:^name="\K(\w)(\w+)(?:(\s\w)(\w+)(?:(\s\w)(\w+))?)?
    • 替换为:\U$1\L$2\U$3\L$4\U$5\L$6
    • 全部替换

    说明:

    ^name="\K       : matches literally name=" then forget it
    (\w)(\w+)       : first letter in group 1, rest of word in group 2
    (?:             : start non capture group
      (\s\w)(\w+)   : a space and first letter in group 3, rest of word in group 4
      (?:           : start non capture group
        (\s\w)(\w+) : a space and first letter in group 5, rest of word in group 6
      )?            : end non capture group, optional
    )?              : end non capture group, optional
    

    您可以添加任意数量的非捕获组来处理任意数量的单词。

    替换:

    \U$1\L$2    : uppercase group 1, lower case group 2
    \U$3\L$4    : uppercase group 3, lower case group 4
    \U$5\L$6    : uppercase group 5, lower case group 6
    

    原文:

    name="TEXT"
    name="TEXT2"
    name="JOHN SMITH"
    name="JOHN SMITH2"
    name="JOHN SMITH CARTER"
    

    给定示例的结果:

    name="Text"
    name="Text2"
    name="John Smith"
    name="John Smith2"
    name="John Smith Carter"
    

    另一种适用于任意数量单词但需要运行 3 replace_all 的方法:

    第一:

    在第一个单词前面加一个空格:

    • Ctrl+H
    • 查找内容:^name="\K
    • 替换为:A SPACE
    • 全部替换

    第二:

    将所有单词改为大写:

    • Ctrl+H
    • 查找内容:(\s\w)(\w+)
    • 替换为:\U$1\L$2
    • 全部替换

    第三:

    去掉第一个单词前面的空格:

    • Ctrl+H
    • 查找内容:"\s
    • 替换为:"
    • 全部替换

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2015-07-28
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      相关资源
      最近更新 更多