das*_*asf 3 regex backreference pcre r
给定字符串ab cd ; ef gh ij,如何删除第一个空格之后的所有空格;,即ab cd ; efghij?我尝试使用\K但无法让它完全工作。
test = 'ab cd ; ef gh ij'
gsub('(?<=; )[^ ]+\\K +','',test,perl=T)
# "ab cd ; efgh ij"
Run Code Online (Sandbox Code Playgroud)
1)gsubfn使用gsubfn在gsubfn包,这里是一个班轮只使用简单的正则表达式。它将捕获组输入到指定的函数中(用公式符号表示),并用函数的输出替换匹配项。
library(gsubfn)
gsubfn("; (.*)", ~ paste(";", gsub(" ", "", x)), test)
## [1] "ab cd ; efghij"
Run Code Online (Sandbox Code Playgroud)
2) gsub 这使用了一个由空格组成的模式,它前面不紧跟一个分号,并且在字符串的其余部分的任何地方都不跟一个分号。
gsub("(?<!;) (?!.*; )", "", test, perl = TRUE)
## [1] "ab cd ; efghij"
Run Code Online (Sandbox Code Playgroud)
3) regexpr/substring这会找到分号的位置,然后使用substring将其分成两部分并替换空格,gsub最后将其重新粘贴在一起。
ix <- regexpr(";", test)
paste(substring(test, 1, ix), gsub(" ", "", substring(test, ix + 2)))
## [1] "ab cd ; efghij"
Run Code Online (Sandbox Code Playgroud)
4) read.table这与(3) 类似,但用于read.table将输入分成两个字段。
with(read.table(text = test, sep = ";", as.is = TRUE), paste0(V1, "; ", gsub(" ", "", V2)))
## [1] "ab cd ; efghij"
Run Code Online (Sandbox Code Playgroud)