我在数据帧中有一个列,其中包含格式的长文本序列(通常是数千个字符):
abab(VR) | ddee(NR) | def(NR) | fff(VR) | oqq | pqq | ppf(VR)即字符串,括号中的后缀,然后是分隔符。
我试图在R中计算出语法,以删除以(VR)结尾的项,包括如果有尾随管道的话,以便留给我:
ddee(NR) | def(NR) | oqq | pqq我无法计算出将删除这些条目的正则表达式(或gsub),并请求任何人是否可以帮助我。
发布于 2016-07-19 15:51:35
如果要使用gsub,可以分两个阶段删除该模式:
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删除;发布于 2016-07-19 15:40:45
下面是一个使用带折叠参数的strsplit和paste的方法:
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)“的向量就会返回,而不需要任何修改。
https://stackoverflow.com/questions/38462650
复制相似问题