输入:"notepad++ capitalize every first letter of every word"
输出:"Notepad++ Capitalize Every First Letter Of Every Word"
我一直在尝试使用 ctr+F
将每个单词的第一个字母大写和regex
.
到目前为止,我一直在尝试使用 find: \b(.)
或\<(.)
替换:\u\1
但这会导致我所有的字母都大写。
我已按 ^(.)
& \u\1
付款接下来是 \s\b(.)
& \u\1
.
但是,这对我来说似乎很愚蠢,因为有很多帖子讨论使用单词边界的开头。我只是很难让它们工作。感谢您的考虑!
最佳答案
背景
根据 Notepad++ 规范(请参阅 Substitutions 部分),将子字符串转为大写时可以使用三个运算符:
\u
Causes next character to output in uppercase
\U
Causes next characters to be output in uppercase, until a\E
is found.
\E
Puts an end to forced case mode initiated by\L
or\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
(不需要使用任何捕获组)。虽然这并不意味着我们只匹配单词开头的字符,但该模式只会匹配单词字符 block ( [a-zA-Z0-9_]
+ 所有 Unicode 字母/数字),并将第一个字符转为大写。
解决方案#2(适用于当前的 Notepad++ v.6.8.8)
第二个解决方案可以通过lookbehinds定义的特殊边界来实现:
(?:(?<=^)|(?<=\W))\w
并替换为 \U$0\E
.
正则表达式 (?:(?<=^)|(?<=\W))\w
仅匹配行开头 ( (?<=^)
) 或非单词字符 ( (?<=\W)
) 之后的字母数字。
替代品 - \U$0\E
- 包含 \U
开始将字母转为大写的标志和 \E
是一个标志,告诉 Notepad++ 停止转换大小写。
如果您有连字符的单词,例如 well-known
,并且您只想将第一部分大写,可以使用 [\w-]+
与 \u$0
替代品。它还将保留类似 -v
的字符串。或--help
完好无损。
关于regex - Notepad++ 将每个单词的第一个字母大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952353/