Notepad++正则表达式将所选句子的第一个单词大写

Notepad++ regex to capitalise the first word of selected sentence

与定制Notepad++有关。我知道 TextFX 'Sentence case.' 存在,但我想用我自己的 regex/macro.

来控制它

测试对象:hello my name is john. hello my name is john. hello my name is john.

目前我有这个,当没有鼠标 selected/highlighted 时,它工作正常。

Find what:    ((?<=^|(?<=[.!?]\s)))(\w)
Replace with: \u[=10=]

但是,当我只 select/highlight 第二个(中间)句子(从 h 开始到句点 . 结束)时,正则表达式什么都不做。 注意:我在 N++ 中勾选了 'Use selection',并且正在使用 'Replace All'。

这是有道理的,因为正则表达式正在寻找行的开头或字符模式 .!? 后跟 space.

我的问题是如何更改正则表达式,使其在 selecting/highlighting 任何句子时都能正常工作,无论它是否按照我的示例位于行首。

我尝试添加一个负向后视以在没有找到字符时进行匹配,但我只设法将每个句子的第一个单词大写。

^匹配行首,而您选择的区域不在行首。您可以将其替换为\Astart of the matching string。由于它会在每个选定的区域进行匹配,所以不能使用\w,需要在其后添加+,以免后面的每个字符都变成大写。

使用

(?<=\A|(?<=[.!?]\s))(\w+)

并替换为 \u[=16=].

另一种方法是使用捕获组(然后,您将能够匹配 !?. 与下一个单词字符之间的空格数的情况不止一个):

(\A|[.!?]\s+)(\w+)

替换为\u