我有以下数据框:
Scripts
1:URT : 3456 || 2: ABC: 5677 || NA : 0 : 0 || NA : 0 : 0
我要替换的模式是'|| NA'
,之后用空格替换。我在r中使用以下命令来执行此操作:
gsub("\\|| NA.*$","",df$Scripts)
但它取代了||在两个我不想要的脚本之间的中间。期望的输出是:
1:URT : 3456 || 2: ABC: 5677
答案 0 :(得分:3)
我们可以使用sub
来匹配零个或多个空格(\\s*
),后跟一个或多个|
(因为它是元字符,我们可以转义(\\
})或将其置于方形brakcets后跟一个或多个空格,然后NA和其余字符,并将其替换为""
sub("\\s*[|]+\\s+NA\\s+.*", "", df$Scripts)
#[1] "1:URT : 3456 || 2: ABC: 5677"
注意:在OP的代码中,它只是转义第一个|
而不是第二个。相反它应该是
gsub("\\s*\\|+\\s*NA.*$", "", df$Scripts)
虽然不需要gsub
或另一个选项是stringi
library(stringi)
stri_replace(df$Scripts, regex="\\s*\\|+\\s*NA.*$", "")
#[1] "1:URT : 3456 || 2: ABC: 5677"
df <- structure(list(Scripts = "1:URT : 3456 || 2: ABC: 5677 || NA : 0 : 0 || NA : 0 : 0"), .Names = "Scripts", row.names = c(NA,
-1L), class = "data.frame")
答案 1 :(得分:1)
非正则表达式方法,
private void DataGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DataGridRow dgr = sender as DataGridRow;
dgr.IsSelected = true;
}
您可以将其包裹在sapply(strsplit(df$Scripts, '||', fixed = TRUE), function(i)
paste(i[!grepl('NA', i)], collapse = '||'))
#[1] "1:URT : 3456 || 2: ABC: 5677 "
中,以摆脱领先/跟随空格