正则表达式每行只打印第一个字符串

时间:2015-12-06 23:40:03

标签: regex go

我试图通过编写一个从.txt文件中获取输入的程序来获得更多Go的经验,然后按字母顺序对每个字符串进行排序,并使用相应的行号打印每个字符串。现在我遇到一个问题,我的程序只是在我传递input.txt文件时每行打印出第一个字符串

package main

import "fmt"
import "regexp"
import "bufio"
import "log"
import "os"
import "strings"

func main() {

    var i int = 0 //counter for loop

    var words1 string

    scanner := bufio.NewScanner(os.Stdin)

    //holdWords := make(map[string]int)
    //Loop through the txt doc and cleanup the lines of strings
    for scanner.Scan(){
        i=i+1

        words1=scanner.Text(); //get the text from line
        words1=strings.TrimSpace(words1) //trim the trailing and leading whitespace

        reg, err:=  regexp.Compile("^[a-zA-Z]+") //regex to look for letters/spaces

        if err != nil{
            log.Fatal(err)
        }

        fmt.Println(reg.FindString(words1))//just testing to see if it prints correct values

    }
}

2 个答案:

答案 0 :(得分:1)

正如西蒙所说,你应该使用FindAllString来查找所有匹配项。此外,您需要从RE的开头删除^(^将模式锚定到字符串的开头)。您还应该在循环外部移动regexp.Compile以提高效率。

答案 1 :(得分:0)

https://play.golang.org/p/Q_yfub0k80

如前所述,FindAllString返回正则表达式的所有连续匹配的切片。但是,FindString会返回最左边的匹配。