Подставьте переменную в методе regexp.MatchString - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть golang скрипт, который нужно создать и найти конкретное регулярное выражение. Строка для поиска идентификатора определена как константа.

const nameRegex = "service-route"

Я могу использовать эту переменную в некоторых местах.

rb := &compute.Route{
        Name:           fmt.Sprintf("%s-%s", nameRegex, generateCode(host))

Я хотел бы использовать эту же строку, чтобы найти также.

В основном у меня есть что-то вроде

matched, _ := regexp.MatchString("^service-route-.*", route.Name)
    if matched {

Выполнение чего-то вроде

matched, _ := regexp.MatchString("^%s-.*" , nameRegex, route.Name)

не работает, так как функция MatchString требует только 1 аргумент.

Я пробовал что-то вроде

myRegex , err := regexp.Compile("%s", nameRegex)
myRegex.MatchString(route.Name)

, что тоже не работает.

Можно ли даже использовать переменную для соответствия регулярному выражению?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Первым параметром MatchString является строка. Поэтому используйте Sprintf (как вы делали ранее), чтобы сгенерировать строку шаблона, что-то вроде этого:

regexp.MatchString(fmt.Sprintf("^%s-.*", nameRegex), route.Name)

или создайте строку с помощью конкатенации:

regexp.MatchString("^" + nameRegex + "-.*", route.Name)

Это похоже на -off проверить, поэтому нет необходимости предварительно скомпилировать регулярное выражение.

0 голосов
/ 04 февраля 2020

Возможно. Вот go детская площадка: https://play.golang.org/p/hc9eMcSzGQC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...