R中多个符号前的gsub字符串
我试图在R中将一列中的多个符号前的字符串合并在一起。让我用一个例子来解释R中多个符号前的gsub字符串,r,regex,gsub,R,Regex,Gsub,我试图在R中将一列中的多个符号前的字符串合并在一起。让我用一个例子来解释 data <- data.frame(c("1_a-b","2: b-c","3_c-d")) colnames(data) <- "ABC" data如何使用stringr包 library(stringr) df %>% mutate( ABC = as.character(ABC), new = if_else( str_detect(ABC, "\\w\\-\\
data <- data.frame(c("1_a-b","2: b-c","3_c-d"))
colnames(data) <- "ABC"
data如何使用stringr
包
library(stringr)
df %>%
mutate(
ABC = as.character(ABC),
new = if_else(
str_detect(ABC, "\\w\\-\\w"),
str_extract(ABC, "\\w\\-\\w"),
ABC
)
)
ABC new
1 1_a-b a-b
2 2: b-c b-c
3 3_c-d c-d
更改为包含if-else语句-遗漏了您对检查该序列感兴趣的内容。如果您需要删除到最后一个\uu
或:
,则可以使用以下正则表达式:
sub(".*[_:]\\s*", "", data$ABC)
sub(".*?[_:]\\s*", "", data$ABC)
或者,如果您最多需要删除第一个。
或:
:
sub(".*[_:]\\s*", "", data$ABC)
sub(".*?[_:]\\s*", "", data$ABC)
图案细节:
*?
-任何0个以上字符,尽可能少(*
匹配0个或更多字符)
[\::][/code>-a
或:
\s*
-0+空格
请参阅和:
也许“*[\:]\\s*”
?我不知道这是否真的解决了OP使用
和:
作为分隔符的用例。“.*[\:]\\s*”真的很好用,我相信是有效的。不相关,但grepl(“+”,“250K”)给了我真实的,你知道为什么吗?@BruceWayne这就是TRE处理与模式初始位置的量词相关的未定义正则表达式行为的方式。您通常无法量化模式的开始,这显然是用户错误。TRE在这方面相当宽松,因此您可以依赖PCRE-grepl(“+”,“”,perl=TRUE)
将向您显示一个错误。有什么替代方法?除了这个:“+“%in%”“250K”,就像我提到的,使用PCRE。@BruceWayne如果你只需要检查一个文本字符串,为什么还要用正则表达式呢?使用grepl(“+”,“250K”,fixed=TRUE)
将显示FALSE
。
sub(".*?[_:]\\s*", "", data$ABC)
data <- data.frame(c("1_a-b","2: b-c","3_c-d"))
colnames(data) <- "ABC"
if(any(grepl(":|_", data$ABC))){
data$ABC <- sub(".*[_:]\\s*", "", data$ABC)
}
ABC
1 a-b
2 b-c
3 c-d