I am trying to write regexp that returns the substring for string that begins with dot and until first space. But I am new in regular expressions, so I tried something like that and it doesn't work at all:
package main
import "fmt"
import "regexp"
func main() {
re := regexp.MustCompile("\\.* ")
fmt.Printf(re.FindString(".d 1000=11,12")) // Must return d
fmt.Printf(re.FindString("e 2000=11")) // Must return nothing or ""
fmt.Printf(re.FindString(".e2000=11")) // Must return nothing or ""
}
this code just white 3 white space in golang. What I am doing wrong?
While *
is the wildcard in glob matching, it's not the wildcard in regex. In regex, .
is the wildcard and *
means repetition of 0 or more times. You probably want:
re := regexp.MustCompile("\\..* ")
go playground
But you might notice that it's also returning the dot and space. You can use FindStringSubmatch
and use a capture group to fix this, and you can use backsticks so that you don't have to double escape things:
re := regexp.MustCompile(`\.(.*) `)
match := re.FindStringSubmatch(".d 1000=11,12")
if len(match) != 0 {fmt.Printf("1. %s\n", match[1])}
go playground
Though I would prefer using \S*
(matches non-space characters) instead of .*
to get this match, since it'll reduce the possible backtracking:
re := regexp.MustCompile(`\.(\S*) `)
go playground
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With