Вы можете сопоставить все с начала строки, не являющейся точкой .
, со следующим:
m := regexp.MustCompile(`^[^.]+`).FindString(s)
Playground Link: https://play.golang.org/p/OlPxIcrpmWx
Это работает, потому что:
- первый
^
указывает начало строки
-
[^.]
указывает на совпадение символа, который не является точкой
-
+
является оператором повторения для указания более чем одного
Это автоматически завершит матч при обнаружении .
.
Если вы хотите убедиться, что период существует, вы можете сделать следующее:
m := regexp.MustCompile(`^(.+?)\.`).FindStringSubmatch(s)[1]
Playground Link: https://play.golang.org/p/oK0OvJzR2Ky
Это работает немного иначе, чем выше, в том смысле, что оно должно соответствовать периоду и захватывает все до него.
-
\.
в конце требует совпадения периода
- группа захвата
()
позволяет исключить совпадающий период в результате
-
.
в скобках обозначает любой символ
-
+?
указывает на ленивое повторение для остановки, как только условие выполнено, здесь соответствует буквальному периоду \.