Регулярки довольно мощный инструмент. Но особо хорош он на больших массивах текста, в которых мало упорядоченности, а если читаешь свой лог-файл, в котором всегда определённое структурирование через весь контент, то можно обойтись любыми другими костылями, если решение нужно сейчас, а костыли понятнее. Именно это меня всегда и останавливало перед постижением "RegExp". Проще разделить такой файл по глобальному признаку, а получившиеся части по меткам-разделителям и иметь весь распарсенный документ в массиве, потому как всё равно чаще оно нужно, чем НЕнужно.
Не хочу отбирать у Вас жажду познания этого, без сомнения превосходного инструмента, но приведу пример в аналогии с предыдущей темой:
text :=
(LTrim Join`r`n
"планета 1, континент1, континент2
KODстрана 1, город1, город2
местность 1, поляна1, поляна2
KODдеревня 1, улица1, улица2"
)
target := "KOD"
sep := ", "
wordsArr := GetWords(text, target, sep)
Loop,% wordsArr.Length()
MsgBox,,Title,% A_Index " найденный результат <|==>`n`n" wordsArr[A_Index][1] "`n" wordsArr[A_Index][2] "`n" wordsArr[A_Index][3]
GetWords(text, target, separator) {
result := [], partNumber := 2, parts := StrSplit(text, target)
Loop,% parts.Length() - 1
result.Push(StrSplit(StrSplit(parts[partNumber++], "`r`n")[1], separator))
return result
}
Здесь функция "GetWords()" принимает параметрами:
1 - переменную, в которой текст файла.
2 - глобальный признак, по которому нужно находить строки.
3 - разделитель, которым сепарируется строка на отдельные фрагменты.
Возвращает двумерный массив найденных результатов, в котором доступ к каждому слову в строке производится через указание двух индексов в квадратных скобках(wordsArr[1][2]), где первый индекс обозначает номер строки, а второй, номер слова.