R:找到并删除所有一到两个字母的单词

时间:2015-07-03 09:55:02

标签: regex r

我试图从文本段落中删除任何一两个字母的单词。这是我的第一个想法

gsub(" [a-zA-Z]{1,2} ", " ", "a ab abc B BB BBB")
[1] "a aaa BB BBBB"

我可以看到“a”是如何不被替换的,因为它没有带空格,我可以看到“BB”是如何被替换的,因为它带领的空间已经被“B”抓住了。

2 个答案:

答案 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)