場景: 有乙個html頁面的table**, 需要轉換成csv**.
html原始檔如下:
<table
><
tr><
td>序號
td><
td>
idtd
><
td>cid
td>
tr>
<
tr>
<
td>1
td>
<
td>018011005
td>
<
td>100012
td>
tr>
<
tr>
<
td>2
td>
<
td>018011001
td>
<
td>100012
td>
tr>
<
tr>
<
td>3
td>
<
td>018011009
td>
<
td>100012
td>
tr>
<
tr>
<
td>4
td>
<
td>018011003
td>
<
td>100012
td>
tr>
<
tr>
<
td>5
td>
<
td>018011010
td>
<
td>100012
td>
tr>
<
tr>
<
td>6
td>
<
td>018011007
td>
<
td>100012
td>
tr>
<
tr>
<
td>7
td>
<
td>018011004
td>
<
td>100012
td>
tr>
<
tr>
<
td>8
td>
<
td>018011006
td>
<
td>100012
td>
tr>
table
>
正則替換步驟如下:
1. 替換table標籤:
:%s///
:%s/<\/table>//
2. 刪除只有空白的行:
:g/^\s*$/d
3. 刪除行開頭的空格:
:%s/^\s*//g
4. tr內的td資料合併到一行(替換為逗號):
:%s/<\/td>\n/,/g
5. 替換tr標籤:
:%s///g
:%s/<\/tr>//g
6. 再次刪除空行:
:g/^\s*$/d
7. 先處理表頭:
:1s/<\/td>/,/g
8. 刪除第乙個逗號前的資料:
:%s/.\,//
:%s/.*,// (錯誤的命令,會刪除第二個逗號前的內容,因為 .*是貪婪模式,會盡量多的匹配逗號)
9. 刪除行結尾的td標籤
:%s/<\/td>//g
[替換完成]
替換完後的檔案內容如下:
id,cid018011005,100012
018011001,100012
018011009,100012
018011003,100012
018011010,100012
018011007,100012
018011004,100012
018011006,100012
vim 替換詳解
range s pattern string c,e,g,i 5 1 range指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern就是要被替換掉的字串,可以用 regexp 來表示。strin...
vim替換功能
range s pattern string c,e,g,i 5.1 range指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern就是要被替換掉的字串,可以用 regexp 來表示。strin...
VIM替換功能
1 替換 substitute range s pattern string c,e,g,i 5.1 range 指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern 就是要被替換掉的字串,可以...