【问题标题】:Notepad++ Capitalize Every First Letter of Every WordNotepad++ 将每个单词的首字母大写
【发布时间】:2015-11-04 07:16:48
【问题描述】:

输入:"notepad++ capitalize every first letter of every word"

输出:"Notepad++ Capitalize Every First Letter Of Every Word"

我一直在尝试使用 ctr+F 和 regex 将每个单词的首字母大写。

到目前为止,我一直在尝试将 find:\b(.) 或 \<(.) 与 replace:\u\1 一起使用,但这会导致我的所有字母都大写。

我已经到期了^(.) & \u\1,然后是\s\b(.)和\u\1。

但是,这对我来说似乎很愚蠢,因为有很多帖子都在谈论使用单词边界的开头。我只是很难让它们工作。感谢您的考虑!

【问题讨论】:

  • 除非您使用第三方插件,否则在 N++ 中无法做到这一点。也不是正则表达式

标签: regex notepad++


【解决方案1】:

背景

根据 Notepad++ 规范(参见Substitutions 部分),在将子字符串转为大写时,有三个操作符很有用:

\u
使下一个字符以大写形式输出
\U
导致下一个字符以大写形式输出,直到找到 \E。
\E
结束由\L 或\U 发起的强制案例模式。

因此,您可以匹配子字符串并将其第一个字符用\u转为大写以使其大写,或匹配一个字符并使用\U/\E强>。

注意,Unicode 字符不会变成大写,只有 ASCII 字母会受到影响。


Notepad++ 中的 BOW(单词开头)错误

请注意,目前(在 Notepad++ v.6.8.8 中)单词的开头由于某种原因不起作用。适用于大多数引擎的通用解决方案(在 Sublime Text 中使用它会匹配)不起作用:

\b(\w)

此正则表达式匹配所有单词字符,无论它们在字符串中的位置如何。

我记录了一个错误 Word boundary issue with a generic subpattern next to it #1404。


解决方案 #1(适用于当前的 Notepad++ v.6.8.8)

第一个解决方案可以使用\w+ 并替换为\u$0(无需使用任何捕获组)。虽然这并不意味着我们只匹配单词开头的字符,但该模式只会匹配单词字符块([a-zA-Z0-9_] + 所有 Unicode 字母/数字)并将第一个字符变为大写。


解决方案 #2(适用于当前的 Notepad++ v.6.8.8)

第二种解决方案可以通过lookbehinds定义的特殊边界来实现:

(?:(?<=^)|(?<=\W))\w

并替换为\U$0\E。

正则表达式 (?:(?&lt;=^)|(?&lt;=\W))\w 仅匹配行首 ((?&lt;=^)) 或非单词字符 ((?&lt;=\W)) 之后的字母数字。

替换 - \U$0\E - 包含一个 \U 标志,开始将字母变为大写,\E 是一个标志,告诉 Notepad++ 停止转换大小写。


边缘案例

如果您有连字符的单词,例如well-known,并且您只想将第一部分大写,您可以使用[\w-]+ 替换\u$0。它还将保持-v 或--help 之类的字符串完好无损。

【讨论】:

  • 这比我预期的要复杂得多。谢谢
  • 如果我只能投票超过 200 次(我需要转换的项目数)。为我节省了数小时的编辑时间。谢谢!
  • 仅供参考:这仅适用于 ASCII 字母、西里尔字母等。无法使用 Notepad++ 中的大小写交换运算符更改字母。
【解决方案2】:

每个单词的首字母大写: 使用快捷键:Alt + U

将每个单词的首字母小写: 使用快捷键:Clt + U

在 7.6.3 版中工作的快捷方式

【讨论】:

    【解决方案3】:

    Notepad++ v7.3.2 中有一个快捷方式可以将每个单词的首字母大写。

    ALT + U

    不确定以前的版本。

    【讨论】:

    • 它似乎只适用于选定的文本。此外,Ctrl+Alt+U 将所选文本更改为句子大小写。
    • 完美运行。谢了,兄弟。而CTRL+U 则完全相反。 i-e changes "InitCap" to "initcap"
    【解决方案4】:

    我通过录制一个使用以下替换的宏实现了类似的效果。

    Find what:    ([a-z])+
    Replace with: \u$0\E
    
    Tick 'In selection'
    

    这是我从C:\Users\%USERNAME%\AppData\Roaming\Notepad++\shortcuts.xml 提取的结果宏。

    <Macro name="Title Case" Ctrl="no" Alt="no" Shift="no" Key="0">
        <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
        <Action type="3" message="1601" wParam="0" lParam="0" sParam="([A-Z])" />
        <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
        <Action type="3" message="1602" wParam="0" lParam="0" sParam="\L$0" />
        <Action type="3" message="1702" wParam="0" lParam="898" sParam="" />
        <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
        <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
        <Action type="3" message="1601" wParam="0" lParam="0" sParam="([a-z])+" />
        <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
        <Action type="3" message="1602" wParam="0" lParam="0" sParam="\u$0\E" />
        <Action type="3" message="1702" wParam="0" lParam="898" sParam="" />
        <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
    </Macro>
    

    额外:您可以使用以下方法将其添加到右键单击上下文菜单 (contextMenu.xml):

    <Item MenuEntryName="Macro" MenuItemName="Title Case" />
    

    【讨论】:

      【解决方案5】:

      一个对我有用的更简单的正则表达式:

      查找:(\w+)

      替换:\u$0

      【讨论】:

        猜你喜欢
        • 2015-11-10
        • 2020-08-30
        • 2012-11-11
        • 2012-07-24
        • 2016-12-05
        • 2016-01-10
        • 1970-01-01
        • 2016-12-23
        • 2017-08-02
        相关资源
        最近更新 更多