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

正则表达式括号嵌套错误排查及COMPANY拼写变体替换求助

修复R中处理COMPANY拼写/缩写替换的正则表达式错误

问题背景

需要处理行政数据里COMPANY的各类拼写错误、缩写形式,将它们替换为正确的完整拼写。编写的带注释正则在regex101测试通过,但R代码运行异常,原因是正则存在错误嵌套的括号,导致解析失败。

示例数据:

data <- tibble(respondents.long = c("COPMANY", "COMPANY", "CO", "COMP", "CO ", "COMP ", "COMPNY", "CO#"))

原代码核心问题:

  • 强制要求前置空格(?: ),但示例数据里多数目标值无前置空格,直接漏匹配
  • 分组嵌套混乱,非捕获组未正确闭合,R的regex()无法解析
  • 逻辑冗余,重复分支增加了解析复杂度

修正后的代码

以下是简化且逻辑清晰的实现,覆盖所有目标情况:

library(tidyverse)

data <- tibble(respondents.long = c("COPMANY", "COMPANY", "CO", "COMP", "CO ", "COMP ", "COMPNY", "CO#"))

# 替换所有错误拼写、缩写形式,保留正确的COMPANY
data %>%
  mutate(
    respondents.long = str_replace_all(
      respondents.long,
      regex(
        "^(?:CO(?=#)|CO\\s?$|COMP\\s?$|COP?M?A?N?Y(?!MPANY)$)",
        comments = TRUE
      ),
      "COMPANY"
    )
  )

正则逻辑说明

  • ^和$锚定整个字符串,确保匹配独立的目标值
  • 分支拆解:
    • CO(?=#):匹配CO#
    • CO\\s?$:匹配CO或CO
    • COMP\\s?$:匹配COMP或COMP
    • COP?M?A?N?Y(?!MPANY)$:匹配COPMANY、COMPNY等以CO开头的错误拼写,且排除正确的COMPANY

测试结果

运行后输出:

# A tibble: 8 × 1
  respondents.long
  <chr>           
1 COMPANY         
2 COMPANY         
3 COMPANY         
4 COMPANY         
5 COMPANY         
6 COMPANY         
7 COMPANY         
8 COMPANY         

(若需保留原始正确的COMPANY,当前正则已自动排除,不会对其进行替换)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:40:18