我试图从文本段落中删除任何一两个字母的单词。这是我的第一个想法
gsub(" [a-zA-Z]{1,2} ", " ", "a ab abc B BB BBB")
[1] "a aaa BB BBBB"
我可以看到“a”是如何不被替换的,因为它没有带空格,我可以看到“BB”是如何被替换的,因为它带领的空间已经被“B”抓住了。
答案 0 :(得分:8)
您可以使用\b
字边界和[[:alpha:]]
括号表达式与{1,2}
限制量词,然后修剪前导/尾随空格并将多个空格缩小为1:
tr <- "a ab abc B BB BBB f"
tr <- gsub(" *\\b[[:alpha:]]{1,2}\\b *", " ", tr) # Remove 1-2 letter words
gsub("^ +| +$|( ) +", "\\1", tr) # Remove excessive spacing
结果:
[1] "abc BBB"
请参阅IDEONE demo
答案 1 :(得分:1)
使用以下Perl正则表达式。
x <- gsub("\\s*(?<!\\S)[a-zA-Z]{1,2}(?!\\S)", "", "a ab abc B BB BBB", perl=T)
gsub("^\\s+", "", x)