怎么使用正则替换,在所有英文名字中添加一个 ·
(两个空格夹着·
)
例如
我有现在有一些文本
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][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 默认正则不分大小写的。