我正在嘗試從字符向量的末尾洗掉模式“SO”。我在下面的代碼中遇到的問題是它將洗掉任何不區分大小寫的“SO”序列/只是洗掉整個字串(與檢測到的最后一個模式相比)。我的一個解決方案是進行一些手動清潔并強制所有內容降低,但最終的“SO”除外并使其區分大小寫。
x <- data.frame(y = c("Solutions are welcomed, please SO # 12345")
x <- x %>% mutate(y = stri_replace_last_regex(x$y,"SO.*","",case_insensitive = TRUE)) # This will remove the string entirely - I'm not really sure why.
所需的輸出是:
'Solutions are welcomed, please'
我使用了一個看起來像\\b\\SO{2}\\b和的正則運算式迭代\\b\\D{2}*\\b|[[:punct:]]- 我相信答案可以通過設定單詞邊界在這里,但我不確定。第二個去掉了 SO,但我覺得如果在其他地方有這樣的字母順序與將被洗掉的措辭分開。我只需要最后一次出現的 SO 以及之后的所有內容,包括整個字串中的標點符號。
我將非常感謝任何有關這方面的指導。
uj5u.com熱心網友回復:
您可以使用gsub洗掉您不想要的模式。
gsub("\\sSO. $", "", x$y)
[1] "Solutions are welcomed, please"
如果[[:upper:]]{2}您想推廣到任何兩個連續的大寫字母,請使用。
gsub("\\s[[:upper:]]{2}. $", "", x$y)
[1] "Solutions are welcomed, please"
更新:如果字串中有多個“SO”,上述代碼可能不準確
為了演示,我創建了另一個帶有多個“SO”的字串。在這里,我們正在捕獲從字串 ( ^) 開始到最后一次出現 "SO" ( ) 之前的任何字符SO. $。這些字串存盤在第一個捕獲組中(它是 regex (.*))。然后我們可以用gsub第一個捕獲組 ( ) 替換整個字串\\1,從而擺脫最后一次出現“SO”之后的所有內容。
x <- data.frame(y = "Solutions are SO welcomed, SO please SO # 12345")
gsub('^(.*)SO. $', '\\1', x$y)
[1] "Solutions are SO welcomed, SO please "
uj5u.com熱心網友回復:
library(dplyr)
library(stringr)
x %>%
mutate(y = str_replace_all(y, 'SO.*', ''))
或者
library(dplyr)
library(stringr)
x %>%
mutate(y = str_replace_all(y, 'SO\\s\\#\\s\\d*', ''))
輸出:
y
1 Solutions are welcomed, please
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470727.html
