golang 正則表達式的使用和問題


一、正則表達式多匹配+group
源字符串如下,要提取其中的 11.html/11/北京市

<tr class='provincetr'><td><a href='11.html'>北京市<br/></a></td><td><a href='12.html'>天津市

golang代碼如下,FindAllSubmatch參數-1是取所有匹配的字符串(也可以填數字取具體個數),其中str[0]是匹配的總字符串,str[1]=group[1]

reg, _ := regexp.Compile("<a href='((\\d+).html)'>([\u4e00-\u9fa5]+)")
allstr := reg.FindAllSubmatch([]byte(html), -1)
for _, str := range allstr {
    fmt.Println(string(str[1])) //11.html
    fmt.Println(string(str[2])) //11
    fmt.Println(string(str[3])) //北京市
}

二、正則表達式替換
想實現的效果,把下面

[江蘇省(320000)|PROV|0|][蘇州市(320500)|CITY|0|][吳江區(320509)|AREA|0|][雙板橋路()|ROAD|1|52號$]附近

轉換為:

江蘇省蘇州市吳江區雙板橋路52號附近

下面是正確的golang代碼

reg := regexp.MustCompile("\\[([^\\(]+)\\(\\d*\\)\\|\\w*\\|\\d\\|([^\\]\\$]*)\\$?\\]")
fmt.Println(dis.Address)
dis.Address = reg.ReplaceAllString(dis.Address, "$1$2")
fmt.Println(dis.Address)

下面的代碼是同樣的效果下和regexbuddy的語法,和golang的語法主要區別在:轉義符要多一個\

\[([^\(]+)\(\d*\)\|\w*\|\d\|([^\]\$]*)\$?\]

總結如下

  1. 正常的表達式中\w是能識別中文,但是golang似乎並不可以,需要用[\u4e00-\u9fa5]顯示指定
  2. golang的轉義符要用\\
  3. \w \d 等常用的也要用 \\w \\d 來表示
  4. regexp.MustCompile(``)這種寫法還有待嘗試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM