R语言中用str_extract解决后向断言重复次数及姓名提取问题
解决向量中姓名提取的问题
给定向量:
a = c('nameJack\n', 'name Lucy\n', 'name Rose\n', 'name Biden\n', 'name Peter\n')
需要提取无空格的真实姓名,以下是几种可行方案:
方案1:分步移除无关字符
先去掉开头的name及后续所有空格,再移除末尾的换行符:
library(stringr) # 移除前缀name及后面的所有空格,再移除末尾换行 result <- str_remove(a, "^name\\s*") %>% str_remove("\\n$") result
输出结果:
[1] "Jack" "Lucy" "Rose" "Biden" "Peter"
方案2:正则捕获组直接提取
利用捕获组匹配name后零或多个空格后的字母序列,直接提取目标姓名:
# 使用str_match获取捕获组内容 matches <- str_match(a, "name\\s*(\\w+)") result <- matches[, 2] result
输出结果同上。
问题原因解释
你之前遇到的报错是因为ICU正则引擎(stringr依赖的引擎)要求后向断言的匹配长度必须是有限的,(?<=name\\s*)里的\\s*是无限重复,违反了这个限制,所以报错。而用(?<=name\\s{0,6})虽然合法,但匹配结果会包含name后面的空格,导致提取的姓名带前置空格。
以上两种方案都避开了后向断言的长度限制问题,同时精准提取了无空格的姓名。
内容的提问来源于stack exchange,提问作者zhiwei li
相关产品推荐
相关产品推荐

