package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?mi)^(?<given_name>(?:[^.,!?;:\s]+\s)*?(?:[^.,!?;:\s]+))(?:\s(?:(?<middle_initial>[^.,!?;:\s])(?:\.\s|\.)?)??(?<family_name>(?:(?:(?:(?:a|ab|af|ap|abu|aït|al|ālam|at|ath|aust|austre|bar|bath|bat|ben|bin|ibn|bet|bint|da|das|de la|degli|del|dele|della|der|di|dos|du|e|el|fetch|vetch|fitz|i|ka|kil|gil|la|le|lille|lu|m'|mac|mc|mck|mhic|mic|mala|mellom|myljom|na|ณ|ned|nedre|neder|ngā|nic|ní|nin|nord|norr|ny|o|ó|ua|uí|opp|upp|öfver|ost|öst|öster|øst|østre|över|øvste|øvre|øver|öz|pour|putra|putera|putri|puteri|setia|setya|stor|söder|sør|sønder|syd|søndre|syndre|søre|te|ter|ter|tre|van|van de|van den|van der|van het|van 't|väst|väster|verch|erch|vest|vestre|vesle|vetle|von|war|zu|von und zu)\s)?[^.,!?;:\s]+)-)?(?:(?:a|ab|af|ap|abu|aït|al|ālam|at|ath|aust|austre|bar|bath|bat|ben|bin|ibn|bet|bint|da|das|de la|degli|del|dele|della|der|di|dos|du|e|el|fetch|vetch|fitz|i|ka|kil|gil|la|le|lille|lu|m'|mac|mc|mck|mhic|mic|mala|mellom|myljom|na|ณ|ned|nedre|neder|ngā|nic|ní|nin|nord|norr|ny|o|ó|ua|uí|opp|upp|öfver|ost|öst|öster|øst|østre|över|øvste|øvre|øver|öz|pour|putra|putera|putri|puteri|setia|setya|stor|söder|sør|sønder|syd|søndre|syndre|søre|te|ter|ter|tre|van|van de|van den|van der|van het|van 't|väst|väster|verch|erch|vest|vestre|vesle|vetle|von|war|zu|von und zu)\s)?[^.,!?;:\s]+)??(?:,?\s(?<suffix>Sr\.?|Snr|Jr\.?|Jnr|[IVX]+))?)?$`)
var str = `John Doe
Mary Jane Smith
Jean-Luc van der Berg Sr.
Maria de la Cruz
Mohamed bin Ahmed al-Farsi
Anna-Nicole Johnson Jr.
Carlos Alberto dos Santos
Sophie von und zu Rhein
Li Na
O'Connor Fitzpatrick III
Yusuf ibn Abdullah
Emma-Louise O'Reilly
Juan Carlos de la Torre
Fatima bint Mohammed
Hans-Christian Andersen
Elena di Matteo
Abdul-Rahman al-Hashimi
Isabella della Rovere
Jean-Pierre Dupont Jr
Sara van den Berg
John Q. Public`
var substitution = "First_Name: "$1"\nMiddle_Initial: "$2"\nLastName: "$3"\nSuffix: "$4"\n"
fmt.Println(re.ReplaceAllString(str, substitution))
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Golang, please visit: https://golang.org/pkg/regexp/