我试图通过编写一个从.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
}
}
答案 0 :(得分:1)
正如西蒙所说,你应该使用FindAllString
来查找所有匹配项。此外,您需要从RE的开头删除^(^将模式锚定到字符串的开头)。您还应该在循环外部移动regexp.Compile以提高效率。
答案 1 :(得分:0)
https://play.golang.org/p/Q_yfub0k80
如前所述,FindAllString
返回正则表达式的所有连续匹配的切片。但是,FindString
会返回最左边的匹配。