個々のフィールドを取得するために解析したい次のテキスト ファイルがあります。
host_group_web = ( )
host_group_lbnorth = ( lba050 lbhou002 lblon003 )
抽出したいフィールドは太字です
- host_group_ web = ( )
- ホスト_グループ_ lbnorth = ( lba505 lbhou002 lblon003 )
host_group_web ( )の間にアイテムがないため、その部分は無視されます
最初のグループにnodegroupと名前を付け、 () の間の項目にノードと名前を付けました
ファイルを 1 行ずつ読み取り、さらに処理するために結果を保存しています。
Golang では、これは私が使用している正規表現のスニペットです。
hostGroupLine := "host_group_lbnorth = ( lba050 lbhou002 lblon003 )"
hostGroupExp := regexp.MustCompile(`host_group_(?P<nodegroup>[[:alnum:]]+)\s*=\s*\(\s*(?P<nodes>[[:alnum:]]+\s*)`)
hostGroupMatch := hostGroupExp.FindStringSubmatch(hostGroupLine)
for i, name := range hostGroupExp.SubexpNames() {
if i != 0 {
fmt.Println("GroupName:", name, "GroupMatch:", hostGroupMatch[i])
}
}
次の出力が得られます。これには、group という名前のノードの残りの一致がありません。
GroupName: nodegroup GroupMatch: lbnorth
GroupName: nodes GroupMatch: lba050
私の質問は、ノードグループとライン内のすべてのノードに一致する正規表現を Golang で取得するにはどうすればよいかということです。たとえば、lba050 lbhou002 lblon003 です。ノードの数は、0 からさまざまです。