首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何排除某些内容不被gsub()替换

如何排除某些内容不被gsub()替换
EN

Stack Overflow用户
提问于 2012-04-06 11:04:40
回答 6查看 4.8K关注 0票数 0

抱歉,如果这是一个愚蠢的问题,我真的是R的新手,我想知道的是,有没有办法在gsub或类似的函数中指定排除?我的数据将如下所示:( 15:.0234,12:.0151),我想用另一个与此(a:.b,c:.d)模式匹配的项目替换前15个项目。但是,只需调用gsub就可以用新模式替换前导15和小数点后的15。简单地告诉它只替换第一个出现的模式是行不通的,因为有很多这样的模式是嵌套的。我的想法是从gsub中排除小数点后跟空格的数字-这可能吗?

EN

回答 6

Stack Overflow用户

发布于 2012-04-07 00:29:49

如果您在gsub中设置了perl=TRUE,那么您可以使用正面和负面正面或负面正面或背面查看,这可能会解决您的问题,例如,模式15(?=:)将匹配后面跟着冒号的15 (但不会匹配/替换冒号),并且不会匹配任何不后面跟着冒号的15。模式`(?

有关更多详细信息,请参阅“perl”部分中的?regex

票数 4
EN

Stack Overflow用户

发布于 2012-04-06 11:38:09

我可以向您展示如何只替换“前导15”,但是您还没有提供生成测试用例的代码,在这些测试用例中,您可以替换或不替换这些嵌套模式,所以这只是一种猜测。

代码语言:javascript
运行
复制
 vec <- c('15: .0234' , '12: .0151')
 gsub("^15", "aa", vec)
#[1] "aa: .0234" "12: .0151"

正则表达式模式中的"^“符号表示字符串的开头。

票数 1
EN

Stack Overflow用户

发布于 2012-04-07 01:45:35

我会考虑将字符串解析为(a, b, c, d, ...)向量,而不是使用正则表达式。例如,您可以这样做:

代码语言:javascript
运行
复制
strsplit("15: .0234, 12: .0151", ": |, ")
# [[1]]
# [1] "15"     ".0234" "12"    ".0151"

那么使用==match%in%[等函数进行替换应该会容易得多。

完成后,您可以使用paste将所有内容重新组合在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10038650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档