首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换R中长文本字符串中以固定模式结尾的文本序列?

如何替换R中长文本字符串中以固定模式结尾的文本序列?
EN

Stack Overflow用户
提问于 2016-07-19 15:24:00
回答 2查看 1.5K关注 0票数 0

我在数据帧中有一个列,其中包含格式的长文本序列(通常是数千个字符):

代码语言:javascript
复制
abab(VR) | ddee(NR) | def(NR) | fff(VR) | oqq | pqq | ppf(VR)

即字符串,括号中的后缀,然后是分隔符。

我试图在R中计算出语法,以删除以(VR)结尾的项,包括如果有尾随管道的话,以便留给我:

代码语言:javascript
复制
ddee(NR) | def(NR) | oqq | pqq

我无法计算出将删除这些条目的正则表达式(或gsub),并请求任何人是否可以帮助我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-19 15:51:35

如果要使用gsub,可以分两个阶段删除该模式:

代码语言:javascript
复制
gsub(" \\| $", "", gsub("\\w+\\(VR\\)( \\| )?", "", s))
# firstly remove all words ending with (VR) and optional | following the pattern and 
# then remove the possible | at the end of the string

# [1] "ddee(NR) | def(NR) | oqq | pqq"
  • 正则表达式\\w+\\(VR\\)将匹配以(VR)结尾的单词,括号由\\转义;
  • ( \\| )?匹配可选的分隔符|,这将确保它将匹配字符串中间和末尾的模式;
  • 可能在字符串末尾遗漏的|可以被第二个gsub删除;
票数 1
EN

Stack Overflow用户

发布于 2016-07-19 15:40:45

下面是一个使用带折叠参数的strsplitpaste的方法:

代码语言:javascript
复制
paste(sapply(strsplit(temp, split=" +\\| +"),
        function(i) { i[setdiff(seq_along(i), grep("\\(VR\\)$", i))] }),
  collapse=" | ")
[1] "ddee(NR) | def(NR) | oqq | pqq"

我们在管道和空格上拆分,然后将结果列表提供给sapply,后者使用grep函数删除以"(VR)“结尾的向量中的任何元素。最后,将结果粘贴在一起。

我添加了一个带有setdiff的子设置方法,这样没有任何"(VR)“的向量就会返回,而不需要任何修改。

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

https://stackoverflow.com/questions/38462650

复制
相关文章

相似问题

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