Notepad ++将每个单词的每个首字母大写

时间:2015-08-11 21:33:47

标签: regex notepad++

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

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

我一直在尝试使用ctr+Fregex将每个单词的第一个字母大写。

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

我已将^(.) & \u\1跟随\s\b(.)&amp; \u\1

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

5 个答案:

答案 0 :(得分:20)

背景

根据Notepad ++规范(参见Substitutions部分),有三个运算符在将子字符串转换为大写时非常有用:

  

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

因此,您可以匹配子字符串并将其第一个字符大写为\u 以将其大写,或匹配字符并使用\U / { {1}}

请注意,Unicode字符不会被转换为大写字母,只会影响ASCII字母。

<小时/>

BOW(Word的开头)Notepad ++中的错误

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

\E

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

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

<小时/>

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

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

<小时/>

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

第二个解决方案可以使用 lookbehinds 定义的特殊边界来实现:

[a-zA-Z0-9_]

并替换为(?:(?<=^)|(?<=[^\w]))\w

正则表达式\U$0\E仅在行的开头((?:(?<=^)|(?<=[^\w]))\w)或非单词字符((?<=^))之后匹配字母数字。

替换 - (?<=[^\w]) - 包含一个\U$0\E标志,开始将字母大写,\U是一个告诉Notepad ++停止转换大小写的标志。

<小时/> 边缘情况

如果您使用带有连字符的字词,例如\E,并且您只希望第一部分大写,则可以well-known替换[\w-]+。它还会保留\u$0-v等字符串。

答案 1 :(得分:18)

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

查找:(\w+)

替换:\u$0

答案 2 :(得分:5)

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

ALT + U

不确定以前的版本。

答案 3 :(得分:4)

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

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

在7.6.3版中运行的快捷方式

答案 4 :(得分:2)

通过录制使用以下替换的宏来实现类似的功能。

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" />