2020-02-07 GO 正则表达式

1. 匹配:

import (
  "fmt"
  "regexp"
)
      //查找整个字符串中所有连续的3个数字
      reg := regexp.MustCompile(`\d{3}`)
      match := reg.FindAllStringSubmatch("aaa111bbb222ccc333",-1)
      for i, v := range match {
          fmt.Println("i=",i,"v=",v)
      }
结果:
i= 0 v= [111]
i= 1 v= [222]
i= 2 v= [333]

有时候,需要查找的位置是相对固定的,方法大同小异:

      //查找固定位置出现的3个数字
          reg := regexp.MustCompile(`aaa111bbb(\d{3})ccc(\d{3})`)
          match := reg.FindStringSubmatch("aaa111bbb222ccc333")
          fmt.Println(match[1])  
          fmt.Println(match[2])  
结果:
222
333

总结:在一个字符串中,需要的内容重复次数不定,就用第一个例子的FindAllStringSubmatch函数。如果位置是相对确定的,就用FindStringSubmatch函数,在正则表达式中把需要抓取的内容用()小括号括起来就行了。

2. 替换

//例1:           
           var s = "aaa111bbb222ccc333"
           reg := regexp.MustCompile(`\d{3}`)
           t := reg.ReplaceAllString(s,"###")
           fmt.Println(t)
结果:
aaa###bbb###ccc###

//例2:
           var s = "aaa111bbb222ccc333"
           reg := regexp.MustCompile(`aaa111bbb(\d{3})ccc333`)
           t := reg.ReplaceAllString(s,"###${1}***")
           fmt.Println(t)
结果:
###222***

替换的基本逻辑是:将匹配到的结果,用指定的字符串替换,如例1中,将所有的连续3个数字的部分用#号替换了。不过有时候,我们并不总是想整体替换,这种情况下需要在指定位置将内容用()小括号括起来,然后用$1表示第1个匹配项,$2表示第2个以此类推。比如在例2中,数字222本身被保留,它前面的部分被###替代了,而它后面的部分则被 *** 替代。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,520评论 0 99
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,668评论 0 5
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,625评论 0 4
  • 本文译自 制作正则引擎的作者 Jan Goyvaerts 为工具 RegexBuddy 写的教程版权归原作者所有注...
    极客圈阅读 3,388评论 0 25
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,261评论 0 9

友情链接更多精彩内容