You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中匹配含特殊字符的引号内容

使用R的stringr包提取带特殊字符的引号内容

问题背景

你手头有一段包含中文弯引号、特殊字符(比如::、↑、标点)的文本,想要用正则表达式提取所有引号内的内容,目前在尝试stringr包但对正则写法拿不准对吧?你的示例文本是:

quotes <- c("He was thinking “my go::d I can't get out here”. So he goes “↑beep beep↑” on the horn, this bloke went “HUh HUh,”")

解决方案

首先要明确:你的文本里用的是中文弯引号“”(不是英文直引号""),这是写正则的关键!我们可以用stringr::str_extract_all()来提取所有匹配内容(它比str_subset()更适合这个场景,str_subset()是筛选包含匹配的元素,而我们要提取元素内的具体匹配片段)。

正则表达式说明

我们的核心正则可以写成:“([^”]+)”

  • “:精准匹配开头的中文左引号
  • ([^”]+):捕获组,匹配除了右引号”之外的任意字符([^”]是反向字符类,+表示匹配1次或多次),这样就能把引号内所有内容(包括特殊符号、标点、空格、缩写的')都完整抓出来
  • ”:匹配结尾的中文右引号

完整代码示例

library(stringr)

quotes <- c("He was thinking “my go::d I can't get out here”. So he goes “↑beep beep↑” on the horn, this bloke went “HUh HUh,”")

# 提取所有引号内的内容
extracted_quotes <- str_extract_all(quotes, “([^”]+)”)[[1]]

# 查看结果
print(extracted_quotes)

运行后会得到你想要的结果:

[1] "my go::d I can't get out here" "↑beep beep↑"                   "HUh HUh,"

补充:如果文本混合了直引号怎么办?

如果你的文本里同时存在中文弯引号和英文直引号,可以把正则改成:([“"])([^”"]+)\1。这个正则会先匹配任意一种左引号(“或"),然后捕获中间的内容,最后用\1匹配和开头完全相同的右引号,避免出现引号不匹配的错误。

小提示

  • 如果你不确定引号的具体类型,可以用stringi::stri_escape_unicode()查看字符的Unicode编码,确认是哪种引号
  • str_extract_all()返回的是列表,因为你的quotes是长度为1的向量,所以用[[1]]就能取出里面的结果向量

内容的提问来源于stack exchange,提问作者Chris Ruehlemann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:37:53