我有一个带有段落的文档,其中一些句子以点和一个空格(". Nextline")
结尾,而其他句子以点和两个空格(". Nextline")
结尾。我想将替换点和一个空格替换为点和两个空格,但不增加现有点和两个空格点和三个空格。
段落的句子不是以换行符或“\ n”结尾,除了最后一句。该段末尾将有一个换行符。我想用2个空格开始每个句子,既不是1也不是3或更多。如果我在菜单中使用搜索和替换,则以2个空格开头的句子在其开头增加到3个空格。
我该怎么做?我试过跟随,但它增加了两个空格到三个:
(defun space12 ()
(interactive)
(while (re-search-forward "\\. ?" nil t)
(replace-match ". ")))
问题在哪里,我该如何纠正?
示例输入文字:
This is first sentence (I called it line earlier). This sentence has one space at start. This has two. And this again has one space at start.
答案 0 :(得分:2)
有repunctuate-sentences
:
Put two spaces at the end of sentences from point to the end of buffer.
It works using query-replace-regexp.
If optional argument NO-QUERY is non-nil, make changes without asking for confirmation.
这相当简单,只需将 query-replace-regexp
与正则表达式:\\([]\"')]?\\)\\([.?!]\\)\\([]\"')]?\\) +
一起使用,但是您可以根据需要依次决定每个选项,这对于误报很有用(例如“即").
答案 1 :(得分:0)
您可以将C-M-%
(M-x query-replace-regexp
)与搜索字符串\. \([^ ]\)
和替换字符串. \1
一起使用。
如果您想将\
放入字符串中,请记住您必须使用其他\
转义它。例如:
(defun space12 ()
(interactive)
(while (re-search-forward "\\. \\([^ ]\\)" nil t)
(replace-match ". \\1" t)))
为了让这个“表现得很好”,我会让它始终处理整个缓冲区,然后回到原来的位置:
(defun space12 ()
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "\\. \\([^ ]\\)" nil t)
(replace-match ". \\1" t))))