在R语言中如何删除字符串任意位置以@开头的字符片段
问题原因
你的现有代码存在几个问题导致匹配失败:
- 正则开头写了固定空格,只能匹配前面带空格的@片段,自然识别不到句首的@
- 用
\w+匹配@后的内容,仅能匹配字母、数字、下划线,遇到示例中带.的@片段就会匹配失败 str_remove只会替换第一个命中的片段,类似第一条有两个连续@的场景无法删除干净- 额外加的
str_detect判断完全没必要,匹配不到时字符串替换函数会直接返回原文本,你写的ifelse逻辑反而会把没有@片段的内容误改为NA
修正方案
把正则改成匹配所有@开头到下一个空格前的内容,再用全局替换函数删除所有命中片段即可:
library(dplyr) library(stringr) # 正则含义:匹配@开头,后面所有非空白字符的片段 tweet_pattern <- "@\\S+" Customer <- Customer %>% mutate(cleaned_tweet = str_remove_all(Tweet, tweet_pattern) %>% str_squish())
说明
@\\S+中的\\S代表所有非空白字符,不管@后面跟的是字母、点还是其他符号,都能完整匹配到下一个空格为止,覆盖你所有示例场景str_remove_all会删除整段文本中所有命中的@片段,不管@出现在句首、句中还是句尾- 最后加
str_squish是为了清除删除@后留下的连续空格、首尾多余空格,保证输出文本格式整洁
内容的提问来源于stack exchange,提问作者Dinho
相关产品推荐
相关产品推荐

