Я пытаюсь зафиксировать различные значения, которые может принимать каждая из переменных опроса, извлекая метки значений из словаря данных. Они отформатированы следующим образом:
value AGEGRP_
1 = "0 to 9 years"
2 = "10 to 14 years"
3 = "20 years and over"
88 = "Not available"
;
Я хочу получить следующее:
Group 1: AGEGRP (note: without underscore)
Group 2: 1
Group 3: 0 to 9 years
Group 4: 2
Group 5: 10 to 14 years
Group 6: 3
Group 7: 20 years and over
Group 8: 88
Group 9: Not available
Конечно, количество меток значений будет различаться для каждой переменной.
Используя regex101.com, я построил следующее выражение:
value (.+)_(?:\R|\z)((\s(.+) = "(.+)"(?:\R|\z))+);
Моя функция:
parse_sas_variable_labels <- function(text) {
pattern <- "value (.+)_(?:\\R|\\z)((\\s(.+) = \"(.+)\"(?:\\R|\\z))+);"
l <- str_match_all(text, pattern) # to extract all patterns on the same line
df <- map_dfr(l, ~ tibble(var = .x[,2], label = .x[,3]))
return(df)
}
Это не совсем работает: это дает мне
Group 1. AGEGRP
Group 2. 1 = "0 to 9 years"
2 = "10 to 14 years"
3 = "20 years and over"
88 = "Not available"
Group 3. 88 = "Not available"
Group 4. 88
Group 5. Not available
Только группы 1, 4 и 5 соответствуют тому, что я хочу; но затем он возвращает только последнюю итерацию меток значений, которые он находит, и пропускает метки для возрастов 0-10, 10-19 и 20+. Похоже, что объяснение, согласно regex101.com:
Повторная группа захвата захватит только последнюю итерацию. Поместите группу захвата вокруг повторяющейся группы для захвата всех итераций или используйте вместо нее группу без захвата, если вас не интересуют данные
Как мне исправить мое выражение?