使用 stringr 根据第一个字母删除单词

remove words based on first letter using stringr

我想删除字符串中所有以“a”开头的单词。

输入:

string <- "This is a sentence about nothing."

我的尝试:

stringr::str_remove_all(string,"a*\b")

我得到的输出:

[1] "This is  sentence about nothing."

我想要的输出:

[1] "This is sentence nothing."

我不确定如何根据一个字母进行检测,而是对整个单词执行操作(例如,删除、替换)。感谢任何输入!

a*\b 模式匹配零个或多个 a 个字符,后跟字符串结尾或单词字符。它不匹配一个词,除非它是 a 个词。

您可以使用

stringr::str_remove_all(string,"\ba\w*")
stringr::str_replace_all(string,"\ba\w*", "")
gsub("\ba\w*", "", string, perl=TRUE) ## ASCII only letters/digits

其中 \ba\w* 匹配单词边界,a,然后是零个或多个单词字符。

如果您还想删除单词前的任何空格,请在开头添加 \s*

stringr::str_remove_all(string,"\s*\ba\w*")
stringr::str_replace_all(string,"\s*\ba\w*", "")
gsub("\s*\ba\w*", "", string, perl=TRUE) ## ASCII only letters/digits/whitespaces

如果您需要确保只删除仅由字母组成的自然语言单词,那么您可以将 \w 替换为 \p{L}:

stringr::str_remove_all(string,"\s*\ba\p{L}*")
stringr::str_replace_all(string,"\s*\ba\p{L}*", "")
gsub("(*UCP)\s*\ba\p{L}*", "", string, perl=TRUE) ## any Uncicode letters/digits/whitespaces