如何更换图案

时间:2017-02-10 10:11:05

标签: r regex

我有以下数据框:

                                         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

2 个答案:

答案 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 " 中,以摆脱领先/跟随空格