Golang中如何使用正则表达式获取多个匹配值

Golang中如何使用正则表达式获取多个匹配值

author, _ := regexp.Compile("<td>(.*?) ")

需要返回: Teste1 Teste2 Teste3

5 回复

您的帖子未包含任何输入数据。请检查您对标记的使用方式,可能由于问题格式不当导致数据对我们不可见。

更多关于Golang中如何使用正则表达式获取多个匹配值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


哇哦, 我之前不知道有这个包。 非常感谢。 它起作用了 smiley

为什么不直接解析HTML并查找标签呢?对html包文档中的示例稍作修改就足够了:

doc, err := html.Parse(r)
if err != nil {
	// ...
}
var f func(*html.Node)
f = func(n *html.Node) {
	if n.Type == html.ElementNode && n.Data == "td" {
		//现在对内部文本进行处理,比如打印它
                fmt.Printf("<td> content is: %s\n", n.FirstChild.Data)
	}
	for c := n.FirstChild; c != nil; c = c.NextSibling {
		f(c)
	}
}
f(doc)

这是一个在playground上的可运行示例:https://play.golang.org/p/SYTxumORJoT

我的字符串包含一个HTML页面,我需要获取所有以"td"开头的值 示例: 构建我的字符串

resp, err := http.Get("http://www4.tjmg.jus.br/juridico/sf/proc_resultado.jsp?comrCodigo=479&numero=1&listaProcessos=01147778620178130479&btn_pesquisar=Pesquisar")
	if err != nil {
		log.Fatalln("Erro")
	}
	html, _ := ioutil.ReadAll(resp.Body)

我的正则表达式代码

author, _ := regexp.Compile("<td>(.*?) ")

我想要获取字符串html中所有包含td的值。

抱歉,我的英语不是很好

在Go语言中,可以使用regexp包中的FindAllStringSubmatch方法来获取正则表达式的多个匹配值。以下是一个完整的示例,展示如何从给定的字符串中提取所有匹配的<td>标签内的内容:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    // 示例HTML字符串
    html := `<table>
        <tr><td>Teste1</td></tr>
        <tr><td>Teste2</td></tr>
        <tr><td>Teste3</td></tr>
    </table>`

    // 编译正则表达式,匹配<td>标签内的内容
    re := regexp.MustCompile(`<td>(.*?)</td>`)
    
    // 查找所有匹配项
    matches := re.FindAllStringSubmatch(html, -1)
    
    // 遍历匹配结果并输出
    for _, match := range matches {
        if len(match) >= 2 {
            fmt.Println(match[1]) // match[1]包含第一个捕获组的内容
        }
    }
}

输出结果:

Teste1
Teste2
Teste3

代码说明:

  1. 使用regexp.MustCompile编译正则表达式<td>(.*?)</td>,其中(.*?)是非贪婪匹配,用于捕获<td></td>之间的内容
  2. FindAllStringSubmatch返回一个二维切片,每个元素代表一个完整匹配,其中第一个元素是整个匹配的字符串,后续元素是各个捕获组的内容
  3. 通过遍历匹配结果,提取每个匹配项的第一个捕获组(索引为1)即可获得所需的值

如果需要在更复杂的HTML中提取数据,建议使用专门的HTML解析库如goquery,但对于简单的模式匹配,正则表达式是有效的解决方案。

回到顶部