怎么使用正则替换,在所有英文名字中添加 ` · `(两个空格夹着·)

怎么使用正则替换,在所有英文名字中添加一个 ·(两个空格夹着·

例如

我有现在有一些文本

Bob Bill ,Marry Emma,Ava Light,
Noah William,Logan Oliver,
What is you name.
Bill Charlotte,

经过替换后成

Bob · Bill ,Marry · Emma,Ava · Light,
Noah · William,Logan · Oliver,
What is you name.
Bill · Charlotte,

可以通过识别两个连续的首字母大写的单词来筛选名字

/[A-Z]\w+ [A-Z]\w+/gm

正则比较强大,但有时候不能一次性写对,导致最终效率可能并不高。

如果文本不多,简单的办法是直接替换空格,再选择性替换。

正则解法看下楼 :nerd_face:

一种正则和替换表达式是这样的: \([A-Z][a-zA-Z]+\) \([A-Z][a-zA-Z]+\) → \1 · \2

有些边界情况可能会有问题。

1 个赞

仅针对给的例子,直接把一个空格替换成两个空格夹着 ·

(defun what-ever-name-u-like ()
  (interactive)
  (let (case-fold-search)
    (goto-char (point-min))
    (while (re-search-forward "\\([A-Z]\\w+\\) \\([A-Z]\\w+\\)" nil t)
      (replace-match "\\1 · \\2"))))

不是很懂你们用 vim 还做不好的。直接写个小函数不好么,debug 还方便。注意一下 case-fold-search, Emacs 默认正则不分大小写的。