如何在R中使用正则表达式提取@后非数字开头的企业账号短语
解决方案
原有代码问题梳理
- 正则表达式开头多了强制匹配的空格,你的示例中
@是字段开头的内容,前面无空格,会导致匹配失效 - 没有使用分组或断言提取
@后的账号内容,会把@本身也计入匹配结果,不符合输出要求 - 语法层面漏了
mutate()函数(dplyr管道中新增字段必须用mutate包裹),且没有按照要求使用case_when语句
修正后实现代码
首先调整正则为零宽断言写法,直接提取@后非数字开头的账号内容:
# 加载依赖包 library(dplyr) library(stringr) # 正则含义:匹配@后面、非数字开头的账号字符,提取结果自动忽略@符号 tweet_pattern <- "(?<=@)(?!\\d)\\w+" Customer <- Customer %>% mutate(Response_To_Comp = case_when( str_detect(Tweet, tweet_pattern) ~ str_extract(Tweet, tweet_pattern), TRUE ~ NA_character_ ))
效果说明
运行上述代码后得到的结果和你提供的预期输出完全一致:
- 非数字开头的企业账号
@sprintcare、@apple会分别提取出sprintcare、apple - 数字开头的
@12345、@45678会被过滤,返回NA
内容的提问来源于stack exchange,提问作者Dinho
相关产品推荐
相关产品推荐

