输入:"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
。
然而,在我看来,这似乎很傻,因为有很多帖子谈论使用单词边界的开头。我只是很难让他们发挥作用。谢谢你的关心!
发布于 2015-08-11 22:39:26
背景
根据Notepad++规范(请参阅http://docs.notepad-plus-plus.org/index.php/Regular_Expressions部分),有三个操作符在将子字符串大写为大写时很有用:
\u
导致下一个字符以大写形式输出\U
使下一个字符以大写形式输出,直到找到\E
为止。\E
结束由\L
或\U
发起的强制案例模式。
因此,您可以选择匹配一个子字符串并使用\u
将其第一个字符大写改为大写,或者匹配一个字符并使用 \U
**/**\E
.。
注意: Unicode字符不会大写,只有ASCII字母会受到影响。
Notepad++中的弓形(字首) Bug
请注意,目前(在Notepad++ v.6.8.8中),word的开头由于某种原因不起作用。与大多数引擎一起工作的通用解决方案(在崇高文本中使用它,它将匹配)不起作用:
\b(\w)
此正则表达式匹配所有单词字符,而不管它们在字符串中的位置如何。
,我记录了一个bug https://github.com/notepad-plus-plus/notepad-plus-plus/issues/1404。
解决方案#1 (针对当前的Notepad++ v.6.8.8)
first解决方案可以使用\w+
并用\u$0
替换(不需要使用任何捕获组)。虽然这并不意味着我们只在单词的开头匹配字符,但模式将只匹配大量的单词字符([a-zA-Z0-9_]
+所有Unicode字母/数字),并将第一个字符大写。
解决方案2(针对当前的Notepad++ v.6.8.8)
第二个解决方案可以用用查找器定义的特殊边界来实现。
(?:(?<=^)|(?<=\W))\w
代之以\U$0\E
。
regex (?:(?<=^)|(?<=\W))\w
只在行的开头((?<=^)
)或非字字符((?<=\W)
)之后匹配字母数字。
替换-- \U$0\E
--包含一个开始转大写字母的\U
标志,\E
是一个指示Notepad++停止大小写转换的标志。
边缘案例
如果您有像well-known
这样的连字符,并且只希望第一部分被大写,您可以使用[\w-]+
和\u$0
替换。它还将保持像-v
或--help
这样的字符串的完整性。
https://stackoverflow.com/questions/31952353
复制相似问题