抱歉,如果这是一个愚蠢的问题,我真的是R的新手,我想知道的是,有没有办法在gsub或类似的函数中指定排除?我的数据将如下所示:( 15:.0234,12:.0151),我想用另一个与此(a:.b,c:.d)模式匹配的项目替换前15个项目。但是,只需调用gsub就可以用新模式替换前导15和小数点后的15。简单地告诉它只替换第一个出现的模式是行不通的,因为有很多这样的模式是嵌套的。我的想法是从gsub中排除小数点后跟空格的数字-这可能吗?
发布于 2012-04-07 00:29:49
如果您在gsub中设置了perl=TRUE,那么您可以使用正面和负面正面或负面正面或背面查看,这可能会解决您的问题,例如,模式15(?=:)将匹配后面跟着冒号的15 (但不会匹配/替换冒号),并且不会匹配任何不后面跟着冒号的15。模式`(?
有关更多详细信息,请参阅“perl”部分中的?regex。
发布于 2012-04-06 11:38:09
我可以向您展示如何只替换“前导15”,但是您还没有提供生成测试用例的代码,在这些测试用例中,您可以替换或不替换这些嵌套模式,所以这只是一种猜测。
vec <- c('15: .0234' , '12: .0151')
gsub("^15", "aa", vec)
#[1] "aa: .0234" "12: .0151"正则表达式模式中的"^“符号表示字符串的开头。
发布于 2012-04-07 01:45:35
我会考虑将字符串解析为(a, b, c, d, ...)向量,而不是使用正则表达式。例如,您可以这样做:
strsplit("15: .0234, 12: .0151", ": |, ")
# [[1]]
# [1] "15" ".0234" "12" ".0151"那么使用==、match、%in%、[等函数进行替换应该会容易得多。
完成后,您可以使用paste将所有内容重新组合在一起。
https://stackoverflow.com/questions/10038650
复制相似问题