删除句子中的所有元音,除了R中单词开头出现的元音

时间:2016-03-23 08:11:22

标签: r gsub

如果它们不是句子中单词的第一个字符,则意图是将所有元音替换为空白。

对于实例,I AM A HAPPY MINISTER => I AM A HPPY MNSTR。有没有办法在R中实现这个?

3 个答案:

答案 0 :(得分:6)

您可以尝试使用环视:

gsub("(?<=[A-Z])[AEIOU]", "", "I AM A HAPPY MINISTER", perl=TRUE)
# [1] "I AM A HPPY MNSTR"

此正则表达式搜索以任何大写字母开头的大写元音,然后将它们替换为空字符串。

正如@Jota在评论中提到的,另一种选择是使用\\S(除了空格类之外的任何东西),这将允许在连字符或引号之后删除元音,例如:

gsub("(?<=\\S)[AEIOU]", "",  "I AM A HAPPY WELL-INTENTIONED MINISTER, D'ACCORD", perl=TRUE)
#[1] "I AM A HPPY WLL-NTNTND MNSTR, D'CCRD"

变体,使用参数ignore.case

gsub("(?<=\\S)[aeiou]", "", "I AM A HAPPY WELL-INTENTIONED MINISTER, D'ACCORD", perl = TRUE, ignore.case = TRUE)

答案 1 :(得分:3)

我们可以做到

x <- "I AM A HAPPY MINISTER"
gsub("([^\\w ])[AEIOU]", "\\1", x)

这会搜索不在单词限制或空格之后的元音。元音被删除 - 只返回非wordlimit字符(或空格)。

答案 2 :(得分:2)

我们可以SKIP[AEIOU]开头并与字符串其他部分中的[AEIOU]匹配的字词,将其替换为''

gsub("(\\b|\\s)[AEIOU](*SKIP)(*F)|[AEIOU]", "", str1, perl=TRUE)
#[1] "I AM A HPPY MNSTR"

数据

str1 <-  "I AM A HAPPY MINISTER"