如何在R中从多份Word文档批量提取引号内容并解决多引号匹配错误问题
问题原因
你当前使用的正则逻辑存在匹配错位:(?<=").*?(?=")会按顺序捕获所有前后为双引号的片段,第一个引号对的右引号会被识别为下一次匹配的左引号边界,因此会误捕获两个独立引号对之间的非引用内容。
修正代码
只需修改提取引号部分的逻辑,先匹配完整的双引号包裹片段,再去除首尾的双引号即可:
library(readtext) library(stringr) #' 存储文章的文件夹路径 path <- "articles" #' 读取所有docx文件 mydata <- readtext(paste0(path, "\\*.docx")) #' 替换弯引号为直引号 mydata$text <- gsub("/’", "/'", mydata$text, ignore.case = TRUE) mydata$text <- gsub("[“”]", "\"", gsub("[‘’]", "'", mydata$text)) #' 提取引号内容:先匹配完整引号对,再去除首尾引号 result <- stringi::stri_extract_all_regex(str = mydata$text, pattern = '"[^"]*"') result <- lapply(result, function(x) gsub('^"|"$', '', x))
效果验证
修改后第一份文档的输出结果为:
[[1]]
[1] "We got him and he is healthy,"
[2] "I adore tigers"
符合预期提取要求。
如果需要同时提取单引号包裹的内容,只需将正则改为["'][^"']*["']即可。
内容的提问来源于stack exchange,提问作者adkane
相关产品推荐
相关产品推荐

