英文:
Regular expression only printing first string per line
问题
我正在尝试通过编写一个程序来获取更多的Go编程经验。该程序从一个.txt文件中获取输入,然后对每个字符串进行按字母顺序排序,并打印出每个字符串及其对应的行号。目前我遇到的问题是,当我将input.txt文件传递给程序时,它只打印出每行的第一个字符串。
package main
import "fmt"
import "regexp"
import "bufio"
import "log"
import "os"
import "strings"
func main() {
var i int = 0 //循环计数器
var words1 string
scanner := bufio.NewScanner(os.Stdin)
//holdWords := make(map[string]int)
//遍历txt文档并清理字符串行
for scanner.Scan(){
i=i+1
words1=scanner.Text(); //获取行中的文本
words1=strings.TrimSpace(words1) //去除前导和尾随空格
reg, err:= regexp.Compile("^[a-zA-Z]+") //用于查找字母/空格的正则表达式
if err != nil{
log.Fatal(err)
}
fmt.Println(reg.FindString(words1))//只是测试是否打印出正确的值
}
}
以上是你提供的代码的翻译。
英文:
I'm trying to get more experience with Go by writing a program that takes input from a .txt file, then sorts each string alphabetically and prints each one out with it's corresponding line number. Right now I'm having a problem where my program is only printing out the first string per line when I pass it my input.txt file
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
}
}
答案1
得分: 1
如Simon所提到的,你应该使用FindAllString
来查找所有匹配项。此外,你需要将正则表达式开头的^移除(^将模式锚定到字符串的开头)。为了提高效率,你还应该将regexp.Compile移到循环外面。
英文:
As Simon mentioned, you should be using FindAllString
to find all matches. Also, you need to remove the ^ from the beginning of the RE (^ anchors the pattern to the beginning of the string). You should also move the regexp.Compile outside the loop for efficiency.
答案2
得分: 0
根据这里的说明,FindAllString
返回正则表达式的所有连续匹配项的切片。而 FindString
则返回最左边的匹配项。
https://play.golang.org/p/Q_yfub0k80
英文:
https://play.golang.org/p/Q_yfub0k80
As mentioned here, FindAllString
returns a slice of all successive matches of the regular expression. But, FindString
returns the leftmost match.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论