我正在努力解決字串提取問題 - 請參見下面的示例。如果您能幫助我,我將不勝感激!
注意:在這里為我缺乏正則運算式知識而道歉
目標: 我試圖從參考向量到目標向量之間提取文本中的匹配項,并在表中創建一個新變數,從參考文本中分配文本。
到目前為止,目標資料框、搜索文本和嘗試的方法的示例:
a <- c(1, 2, 3, 4, 5, 6, 7)
b <- c('TC2', 'TC25', 'TC255', 'Tops', 'TC2_', 'TC2 ', 'TC2555')
df <- data.frame(a, b)
search_text <- c('TC2', 'TC255')
search_string <- paste(paste0(search_text, '[regexp]'), sep = "", collapse = "|")
df %>%
mutate(match = str_extract(b, search_string))
[regexp] 表示我試圖讓這種方法起作用的各種事情......它包括各種“腦筋急轉彎的想法”,比如“\\d?”等等(這個和比我想記住的相似)。正如你想象的那樣沒有用。
期望輸出:
最后我想達到這個......
a <- c(1, 2, 3, 4, 5, 6, 7)
b <- c('TC2', 'TC25', 'TC255', 'Tops', 'TC2_', 'TC2 ', 'TC2555')
match <- c('TC2', NA_character_, 'TC255', NA_character_, 'TC2', 'TC2', NA_character_)
df_desired <- data.frame(a, b, match)
您的幫助將不勝感激
uj5u.com熱心網友回復:
search_string <- paste0("(", paste(search_text, collapse = "|"), ")(?![A-Za-z0-9])")
search_string
# [1] "(TC2|TC255)(?![A-Za-z0-9])"
df_desired %>%
mutate(match2 = str_extract(b, search_string))
# a b match match2
# 1 1 TC2 TC2 TC2
# 2 2 TC25 <NA> <NA>
# 3 3 TC255 TC255 TC255
# 4 4 Tops <NA> <NA>
# 5 5 TC2_ TC2 TC2
# 6 6 TC2 TC2 TC2
# 7 7 TC2555 <NA> <NA>
這是使用否定先行,它嘗試匹配但不包括提取文本中的先行匹配。
(我最初想\\b用于詞邊界,但_不適合。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/385036.html
