正则表达式括号嵌套错误排查及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或COCOMP\\s?$:匹配COMP或COMPCOP?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
相关产品推荐
相关产品推荐

