如何使用stringr::word提取撇号外特殊字符前的字符串?
解决方案
针对你的需求,核心是仅以“/”作为分隔符提取前面的内容,而非用所有标点分割。以下是两种简单有效的实现方法:
方法1:调整word()函数的分隔符
直接指定分隔符为"/",替换掉匹配所有标点的正则类[[:punct:]]:
text <- "Il n’a pas réussi à répondre à votre plainte/question et ne vous a pas orienté ailleurs" word(text, sep = "/")
执行结果:
[1] "Il n’a pas réussi à répondre à votre plainte"
该方法会保留字符串中的其他特殊字符(如撇号、逗号、分号等),仅按“/”分割并提取第一部分,完全适配批量处理需求。
方法2:用基础R的strsplit()函数
如果需要处理多个字符串组成的向量,这个方法更灵活:
text_vec <- c( "Il n’a pas réussi à répondre à votre plainte/question et ne vous a pas orienté ailleurs", "Exemple, avec des virgules;/et des points-virgules" ) sapply(strsplit(text_vec, "/"), `[`, 1)
执行结果:
[1] "Il n’a pas réussi à répondre à votre plainte" "Exemple, avec des virgules;"
之前代码出错的原因
你使用的[[:punct:]]是正则表达式中匹配所有标点符号的类别,其中包含了法语里的撇号(’),因此会在撇号位置也分割字符串,导致结果不符合预期。
内容的提问来源于stack exchange,提问作者Rgrvkfer
相关产品推荐
相关产品推荐

