我需要一個使用gsub
的正則表達式的幫助。把這個對象:R匹配和特定字符之間的空格
x <- "4929A 939 8229"
我想刪除「A」和「9」之間的空間,但我不知道如何搭配的唯一差異,而不是在第二空間的空間。我基本上是需要的是這樣的:
x <- gsub("A 9", "", x)
但我不知道怎麼寫的正則表達式不匹配的「A」和「9」,只有他們之間的空間。
在此先感謝!
我需要一個使用gsub
的正則表達式的幫助。把這個對象:R匹配和特定字符之間的空格
x <- "4929A 939 8229"
我想刪除「A」和「9」之間的空間,但我不知道如何搭配的唯一差異,而不是在第二空間的空間。我基本上是需要的是這樣的:
x <- gsub("A 9", "", x)
但我不知道怎麼寫的正則表達式不匹配的「A」和「9」,只有他們之間的空間。
在此先感謝!
您可以使用下面的正則表達式中sub
:
> x <- "4929A 939 8229"
> sub("\\s+", "", x)
[1] "4929A939 8229"
的\\s+
將匹配1個或多個空格符號。
替換零件是一個空字符串。
只是FYI:'sub'用於只查找* first *匹配,並且只執行一個* single * regex替換。 –
要刪除第二個空格,您需要'sub(「^(\\ S * \\ s + \\ S +)\\ s +」,「\\ 1」,x)' –
好,太好了,謝謝。 – giraffehere
gsub
匹配/使用中發現的所有正則表達式,而sub
只匹配/使用第一個。所以
sub(" ", "", "4929A 939 8229") # returns "4929A939 8229"
將做的工作
卸下第二/ n次occurence
你可以做到這一點如通過使用strsplit
如下:
x <- c("4929A 939 8229", "4929A 9398229")
collapse_nth <- function(x_split, split, nth, replacement){
left <- paste(x_split[seq_len(nth)], collapse = split)
right <- paste(x_split[-seq_len(nth)], collapse = split)
paste(left, right, sep = replacement)
}
remove_nth <- function(x, nth, split, replacement = ""){
x_split <- strsplit(x, split, fixed = TRUE)
x_len <- vapply(x_split, length, integer(1))
out <- x
out[x_len>nth] <- vapply(x_split[x_len>nth], collapse_nth, character(1), split, nth, replacement)
out
}
它給你:
# > remove_nth(x, 2, " ")
# [1] "4929A 9398229" "4929A 9398229"
和
# > remove_nth(x, 2, " ", "---")
# [1] "4929A 939---8229" "4929A 9398229"
如果您建議更換* literal *空格符號,則最好使用'sub(「」,「,x,fixed = TRUE)' –
完美,謝謝。你知道是否有辦法做我想做的事?如果這是我需要的第二個空間而不是第一個?解決我的問題,只是想知道是否有辦法。 – giraffehere
@giraffehere:請參閱我的編輯 – Rentrop
使用'子(」」, 「」,X)'(不'gsub') –