//create a regex `(?i)update` will match string contains "update" case insensitive
reg := regexp.MustCompile("(?i)update")
f, err := os.Open("test.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
//Do the match operation
//MatchReader function will scan entire file byte by byte until find the match
//use bufio here avoid load entire file into memory
println(reg.MatchReader(bufio.NewReader(f)))
字符串 About bufio bufio软件包实现了一个缓冲读取器,它可以有效地进行许多小型读取,并提供了额外的阅读方法。
4条答案
按热度按时间pxq42qpu1#
strings.EqualFold()
可以检查两个字符串是否相等,而忽略大小写。它甚至可以与Unicode一起使用。请参阅http://golang.org/pkg/strings/#EqualFold了解更多信息。http://play.golang.org/p/KDdIi8c3Ar
字符串
两者都返回true。
p4tfgftt2#
大概你的问题的重要部分是搜索,而不是关于从文件中阅读的部分,所以我只回答这部分。
可能最简单的方法是将两个字符串(您正在搜索的字符串和您正在搜索的字符串)都转换为全部大写或全部小写,然后搜索。例如:
字符串
你可以在here中看到它。
13z8s7eq3#
不要使用
strings.Contains
,除非您需要精确匹配而不是语言正确的字符串搜索目前的答案都不正确,除非你只搜索ASCII字符 * 少数语言(如英语)没有某些分音符/变音或其他Unicode字符修饰符 *(更“正确”的方式来定义它,如@snap所提到的)。标准的谷歌短语是“搜索非ASCII字符”。
要正确支持语言搜索,您需要使用http://golang.org/x/text/search。
字符串
或者如果你只想要起始索引:
型
在这里搜索
language.Tag
结构以查找您希望搜索的语言,如果您不确定,请使用language.Und
。更新
似乎有一些混乱,所以下面的例子应该有助于澄清事情。
型
lpwwtiir4#
如果你的文件很大,你可以使用regexp和bufio:
字符串
About bufio
bufio软件包实现了一个缓冲读取器,它可以有效地进行许多小型读取,并提供了额外的阅读方法。