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

Remove all vowels in a sentence except for those which occur in the beginning of the word in R

目的是将所有不是句子中单词第一个字符的元音替换为空格。

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

您可以尝试使用环视:

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

此正则表达式搜索前面有任何大写字母的大写元音,然后将其替换为空字符串。

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

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)

我们可以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"

我们可以做到

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

这将搜索不在字数限制或 space 之后的元音。删除元音 - 仅返回非字数限制字符(或 space)。