我想在以“w”结尾的所有单词的末尾添加“大写字母”。 例如,“jaw”应成为“jawcaps”,“blow”应成为“blowcaps”
以下命令使用正则表达式来达到上限要求。
SELECT * INTO #TempTable
FROM TableG
ALTER TABLE #TempTable
DROP COLUMN a
SELECT * FROM #TempTable
DROP TABLE #TempTable
但是当我使用上面的命令时,“jaw”会转换成“jaw caps”而不是“jawcaps”
如何删除位于“jaw”和“caps”之间的空间?
答案 0 :(得分:2)
这个怎么样:
:%s/w\>\zs/caps/g
答案 1 :(得分:1)
你的正则表达式有问题,你的正则表达式会匹配值 w
后的非字符。在您的情况下,请匹配jaw[one space]
而不是jaw
:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
^^^ here match a space
我建议您使用捕获正则表达式。
:%s/\([A-Za-z][A-Za-z]*w\)\([^A-Za-z]\)/\1caps\2
更好的解决方案应该是使用look behind。
:%s/\w\w*w\w\@!/&caps
答案 2 :(得分:0)
Sato Katsura的回答:%s/w\>\zs/caps/g
的作用如下:
搜索" w" character是单词的最后一个字符:/w\>
。
但是不能匹配" w":" w"之后只有一个零宽度的空间。应匹配:/w\>\zs
(或/w\zs\>
)。
将该匹配替换为"大写":s/w\>\zs/caps/
。
在每一行都这样做:范围为%
,并且在这些行的每次出现时:标志为g
。
把它放在一起::%s/w\>\zs/caps/g
。
:h /\>
:h \zs
:h :s
:h :range
:h :s_flags