R语言如何提取字符串中|分隔符之前的子串内容
问题原因
|是正则表达式的特殊元字符,代表“或”匹配逻辑,你直接写在匹配模式里没有转义,因此"|.*"会被解析为「匹配空值 或 匹配任意长度字符」,执行替换后自然和原字符串没有差异。
解决方法
你只需要对|做转义处理即可,R的正则语法中需要用双反斜杠转义元字符,以下是几种可行的写法:
- 调整你原来的
str_replace写法
# 基础写法,直接替换|及之后的所有内容 s <- st %>% str_replace("\\|.*", "") # 优化写法:连带删除|前面的多余空格,输出结果更规整 s <- st %>% str_replace("\\s*\\|.*", "")
- 用字符串分割方法实现,无需处理正则替换逻辑
# 按|分割为2段,取第一段再去除首尾空格 s <- st %>% str_split("\\|", n = 2, simplify = TRUE) %>% .[, 1] %>% str_trim()
- 基础R实现,无需加载tidyverse包
s <- sub("\\s*\\|.*", "", st)
以上任意一种方法执行后,都可以得到你预期的输出结果:
"Samsung Galaxy M21 2021 Edition (Charcoal black , 6GB RAM, 128GB Storage)"
内容的提问来源于stack exchange,提问作者Debojit Roy
相关产品推荐
相关产品推荐

