regex - Notepad++ 将每个单词的第一个字母大写

标签 regex notepad++

输入:"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/

相关文章:

JavaScript RegExp #hasgtag 替换为 html 中没有超哈希链接的链接

ruby - 在 ruby​​ 的网页中查找重复模式

html - 替代具有可变宽度的后视

Notepad++ 的F#语法高亮

javascript - @username 使用 JavaScript 的社交媒体正则表达式

regex - 如何停止搜索单词(regex、grep)?

转义反斜杠时 Swift 中的正则表达式不起作用

regex - 使用 RegEx(notepad++) 删除重复的字符串/单词(不是行)

regex - Notepad++ 正则表达式

Notepad++ 中的 PHPDoc 注释?