[Golang] Regular Expression Named Group - Extract Metadata from File Path
source link: http://siongui.github.io/2016/02/20/go-regexp-named-group-match-path-metadata/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Golang regexp example of named group matches - extract metadata from file path.
Problem
We have a string of file path:
articles/2016/01/05/deploy-website-by-pelican-travis-ci-github-pages%en.rst
We want to extract the metadata from the string in the following form:
date - 2016/01/05
slug - deploy-website-by-pelican-travis-ci-github-pages
lang - en
Solution
package main import ( "fmt" "regexp" ) var path1 = "articles/2016/01/05/deploy-website-by-pelican-travis-ci-github-pages%en.rst" var path2 = "articles/2016/01/21/everything-is-teaching-us-ajahn-chah%zh.rst" func main() { pattern := `articles/(?P<date>\d{4}/\d{2}/\d{2})/(?P<slug>[-a-zA-Z0-9]*)%(?P<lang>[_a-zA-Z]{2,5})\.rst` pathMetadata := regexp.MustCompile(pattern) matches := pathMetadata.FindStringSubmatch(path1) names := pathMetadata.SubexpNames() for i, match := range matches { if i != 0 { fmt.Println(names[i], match) } } matches = pathMetadata.FindStringSubmatch(path2) names = pathMetadata.SubexpNames() for i, match := range matches { if i != 0 { fmt.Println(names[i], match) } } }
Output
Output of above code:
date 2016/01/05 slug deploy-website-by-pelican-travis-ci-github-pages lang en date 2016/01/21 slug everything-is-teaching-us-ajahn-chah lang zh
Appendix
Another example:
package main import ( "fmt" "regexp" ) var path = "articles/anya/visuddhimagga/visuddhimagga-chap01%zh.rst" func main() { pattern := `articles/(?P<urlpath>[-a-zA-Z0-9/]*)/(?P<slug>[-a-zA-Z0-9]*)%(?P<lang>[_a-zA-Z]{2,5})\.rst` pathMetadata := regexp.MustCompile(pattern) matches := pathMetadata.FindStringSubmatch(path) names := pathMetadata.SubexpNames() for i, match := range matches { if i != 0 { fmt.Println(names[i], match) } } }
output:
urlpath anya/visuddhimagga slug visuddhimagga-chap01 lang zh
Yet another example:
package main import ( "fmt" "regexp" ) var path = "articles/anya/visuddhimagga/visuddhimagga-chap01%zh.rst" func main() { pattern := `articles[-a-zA-Z0-9/]*/(?P<slug>[-a-zA-Z0-9]*)%(?P<lang>[_a-zA-Z]{2,5})\.rst` pathMetadata := regexp.MustCompile(pattern) matches := pathMetadata.FindStringSubmatch(path) names := pathMetadata.SubexpNames() for i, match := range matches { if i != 0 { fmt.Println(names[i], match) } } }
output:
slug visuddhimagga-chap01 lang zh
References:
[1]python regular expression ?P - Google Search
[2]golang named regular expression - Google Search
[3]golang named path metadata - Go Playground
[4]Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK