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

如何在R中用Regex提取小写单词与带大括号的单词?

在R中用正则提取小写单词和带大括号的单词

问题背景

需要从数据框的word列中提取两类内容:纯小写单词(如sp)、带大括号的单词(如{PPC}),排除全大写单词、单个大写字母、带撇号的大写衍生词(如'EM)等。

示例数据

file   word
 1      sp
 2     WHAT
 3     ISN' 
 4     'EM
 5      O
 6     {PPC}

预期结果

"sp", "{PPC}"

现有代码及问题

原代码尝试通过反向匹配排除大写和数字,但逻辑存在漏洞:

unique(full_dat$word[!grepl("^[A-Z].*[A-Z]|\\d", full_dat$word) & !grepl(" [[:punct:]] ", full_dat$word)])

运行后结果仍包含单个大写字母(如O、I)、带撇号的大写衍生词(如'EM)等不符合要求的内容。


解决方案

直接正向匹配符合要求的两类内容,避免反向匹配的漏洞:

修改后代码

# 提取符合要求的单词并去重,同时排除NA
unique(full_dat$word[!is.na(full_dat$word) & grepl("^[a-z']+$|^\\{.*\\}$", full_dat$word, perl = TRUE)])

正则逻辑解释

正则表达式^[a-z']+$|^\\{.*\\}$分为两部分,用|(或)连接:

  • ^[a-z']+$:匹配纯小写字母+撇号组成的单词(比如sp、don't),^和$确保匹配整个单词,避免部分匹配
  • ^\\{.*\\}$:匹配以{开头、以}结尾的单词(比如{PPC}、{GAP_ANONYMIZATION_NAME}),\\是转义符,因为{}在正则里是特殊字符

效果验证

用示例数据测试,会得到预期的"sp", "{PPC}",同时过滤掉所有不符合要求的内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:20:25