regex - 为每个句子添加换行符

标签 regex vim

我想知道如何将一个段落变成项目符号句子。

之前:

sentence1. sentence2.  sentence3.  sentence4.  sentence5.  sentence6.  sentence7. 

之后:

sentence1.

sentence2.

sentence3


sentence4.

sentence5.

最佳答案

由于到目前为止所有其他答案都展示了如何使用各种编程语言执行此操作,并且您已使用 Vim 标记了该问题,因此以下是如何在 Vim 中执行此操作:

:%s/\.\(\s\+\|$\)/.\r\r/g

我使用了两个回车符来匹配您在问题中显示的输出格式。您可以使用多种替代正则表达式形式:

" Using a look-behind
:%s/\.\@<=\( \|$\)/\r\r/g
" Using 'very magic' to reduce the number of backslashes
:%s/\v\.( |$)/.\r\r/g
" Slightly different formation: this will also break if there
" are no spaces after the full-stop (period).
:%s/\.\s*$\?/.\r\r/g

可能还有很多其他人。

一种非正则表达式的方法是:

:let s = getline('.')
:let lineparts = split(s, '\.\@<=\s*')
:call append('.', lineparts)
:delete

参见:

:help pattern.txt
:help change.txt
:help \@<=
:help :substitute
:help getline()
:help append()
:help split()
:help :d

关于regex - 为每个句子添加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956375/

相关文章:

regex - 以任意顺序匹配多个组,中间有未知文本

javascript - 仅在多个时才匹配最后一次出现

vim - .vimrc : getting E474: Invalid argument: listchars=tab: no matter what I do

ide - 跳到v​​im中的相对编号为开的行

regex - 删除字符串中的前导、尾随和多个空格

regex - 搜索并追加新行 Linux

vim - VIM中的 "function"和 "function!"有什么区别?

vim - Cygwin/vim Windows 7 文件访问问题

windows - 从 Ubuntu 20.04 Vim 复制并粘贴到另一个应用程序

.net - 用两个单引号分割字符串