给定字符串ab cd ; ef gh ij,如何删除;之后的第一个空格(即ab cd ; efghij)之后的所有空格?我尝试使用\K,但无法使其完全正常工作。

test = 'ab cd  ; ef  gh ij'
gsub('(?<=; )[^ ]+\\K +','',test,perl=T)
# "ab cd  ; efgh ij"

最佳答案

1)gsubfn 这是使用gsubfn软件包中的gsubfn的一种单行代码,仅使用简单的正则表达式。它将捕获组输入到指示的函数中(以公式表示法表示),并将匹配项替换为函数的输出。

library(gsubfn)

gsubfn("; (.*)", ~ paste(";", gsub(" ", "", x)), test)
## [1] "ab cd  ; efghij"

2)gsub 此模式使用的模式由空格组成,该空间不以分号开头,而在字符串的其余任何地方不以分号结尾。
gsub("(?<!;) (?!.*; )", "", test, perl = TRUE)
## [1] "ab cd  ; efghij"

3)regexpr / substring 这将查找分号的位置,然后使用substring将其分成两部分,并用gsub替换空格,最后将其粘贴回去。
ix <- regexpr(";", test)
paste(substring(test, 1, ix), gsub(" ", "", substring(test, ix + 2)))
## [1] "ab cd  ; efghij"

4)read.table 这类似于(3),但使用read.table将输入分为两个字段。
with(read.table(text = test, sep = ";", as.is = TRUE), paste0(V1, "; ", gsub(" ", "", V2)))
## [1] "ab cd  ; efghij"

10-06 15:17