我需要在兩個逗號分隔符之間提取具有多種變化的字串。
這些字串的已知相似之處在于它在行中包含“LED”。
可能的變體包括“W-LED”、“OLED”、“Edge LED(區域調光)”、“Direct LED”,但不僅限于這些。
我想提取分隔符之間的所有子字串并洗掉逗號。字串位于資料框內的列中。兩個例子:
ori_col <- c(
"Display: 27 in, VA, Viewing angles (H/V): 170 / 160, W-LED, 1920 x 1080 pixels",
"Display: 21.5 in, VA, Edge LED (Local Dimming), 1920 x 1080 pixels"
)
df <- as.data.frame(ori_col)
我要提取的
"W-LED"
"Edge LED (Local Dimming)"
所以我計劃改變一個新列以使用正則運算式從原始列中提取值。
df %>% mutate(new_column = str_extract(ori_col, "regex"))
我認為它必須使用前瞻和后視之類的東西,但不知道如何在正則運算式之間撰寫。
df %>% mutate(new_column = str_extract(ori_col, "(?<=\\,)(what should I write here)(?=\\,)"))
如果您想了解更多,這個問題源自我之前過于復雜的問題決議到多個列。
uj5u.com熱心網友回復:
使用 scan 拆分字串,然后根據正則運算式邏輯值進行選擇:
> inp <- scan(text=txt, what="", sep=",")
Read 9 items
> inp[ sapply( inp, function(x){grepl("LED",x)}) ]
[1] " W-LED" " Edge LED (Local Dimming)"
uj5u.com熱心網友回復:
從@rawr 評論構建,這個對我有用
df %>% mutate(new_column = gsub(', *([^,]*LED[^,]*),|.', '\\1', ori_col))
如果有人能解釋正則運算式的作業原理,將不勝感激。
uj5u.com熱心網友回復:
如果左側和右側沒有逗號的單個值也應該有效,則可以在單詞邊界之間匹配 LED,匹配除了左側和右側的逗號之外的任何字符,而無需使用任何環視。
[^,]*LED[^,]*
查看正則運算式演示。
如果逗號應該在那里,您可以附加環視斷言。您不必轉義模式中的逗號。
df %>% mutate(new_column = trimws(str_extract(ori_col, "[^,]*LED[^,]*")))
輸出
new_column
1 W-LED
2 Edge LED (Local Dimming)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451639.html
