如何用unnest_tokens()选择性拆分列:括号内逗号不拆分
解决方案:保留括号内内容的字符串拆分
修正后的代码
library(tidytext) my_df = data.frame(id=1:4, urls=c("url.a, url.b (c,d), url.c", "url.d, url.e, url.f", "url.g, url.h (x, y), url.i", "url.d,url.e, url.f")) # 使用带负向断言的正则作为拆分规则 my_df %>% unnest_tokens(out, urls, token = 'regex', pattern = ',\\s*(?![^()]*\\))')
预期输出
id out 1 1 url.a 2 1 url.b (c,d) 3 1 url.c 4 2 url.d 5 2 url.e 6 2 url.f 7 3 url.g 8 3 url.h (x, y) 9 3 url.i 10 4 url.d 11 4 url.e 12 4 url.f
正则规则解释
拆分用的正则,\\s*(?![^()]*\\))专门针对你的四种场景设计:
,:匹配分隔用的逗号\\s*:兼容逗号后有/无空格的情况(覆盖括号外的两种场景)(?![^()]*\\)):负向先行断言,确保当前逗号不在括号内部。逻辑是:从逗号位置往后看,不会出现未匹配左括号就遇到右括号的情况,以此跳过括号内的所有逗号(不管括号内逗号后有无空格)。
内容的提问来源于stack exchange,提问作者SK77
相关产品推荐
相关产品推荐

