#regex #go
#регулярное выражение #Вперед
Вопрос:
У меня есть строки формата %s/%s/%s:%s
, где есть четыре подстроки. Первые три подстроки разделяются символом /
, а последняя — символом :
. Я хочу извлечь отдельные подстроки. Например:
package main
import (
"regexp"
"fmt"
)
func main() {
re := regexp.MustCompile(".*/.*/.*:.*")
fmt.Println(re.FindAllStringSubmatch("a/b/c-c:d", -1))
}
В приведенной выше программе я хотел, чтобы: a
, b
, c-c
и d
были напечатаны как отдельные элементы. Но я не могу извлечь отдельные поля. Вся строка возвращается как первый элемент массива, который FindAllStringSubmatch
возвращает. Каков способ извлечения отдельных элементов, которые соответствуют регулярному выражению?
Ссылка на игровую площадку:https://play.golang.org/p/M1sKGl0n2tK
Комментарии:
1.Вы имеете в виду использование 4 групп?
([^/:] )/([^/:] )/([^/:] ):([^/:] )
regex101.com/r/9trHtP/1
Ответ №1:
Используйте разделение, поскольку его шаблон исправлен, вы знаете, что он :
разделен, тогда /
разделенное регулярное выражение является дорогостоящим процессом процессора
parts := strings.Split("a/b/c-c:d", ":")
fmt.Println(strings.Split(parts[0], "/"), parts[1])
и если вы предпочитаете использовать regex, то также используйте полное совпадение ^
в начале и $
в конце
"^([^/] )/([^/] )/([^/] ):([^:] )$"
например, это не будет соответствовать "a/a/b/c-c:d"
, но будет соответствовать "a/b/c-c:d"
Ответ №2:
Используйте захваченную группу для извлечения отдельных строк.
Попробуйте использовать приведенное ниже регулярное выражение для сопоставления строки и использования $1,$2,$3,$4 для сопоставления отдельных строк.
(. )/(. )/(. ):(. )