R语言实现移除字符串中指定多词标识及之前内容的方法
R字符串截取与个体统计解决方案
问题背景
网页抓取得到如下格式的字符串:
x <- "Tomas Ceresnak (C)\nC 71 16 Elko Prairie Cowboys\n- UNK\nVratislav Bohácik (F)\nF 71 16 Wabun Huskies\n- UNK\nLuca Mullins (D)\nD 71 16 Groundbirch Rhino Chuckers\n- UNK\nDandre Carlton (F)\nF 71 16 Ebony Gothic Knights\n- UNK\nLynn Marez (F)\nF 71 16 Ebony Gothic Knights\n- UNK\nHynek Hoško (C)\nC 71 16 HC Kometa Železnice U18\n- UNK\nGlynn Shields (F)\nF 71 16 Chanhassen Nova Ocelots\n- UNK\nJeet Beals (C)\nC 71 16 Chanhassen Nova Ocelots\n- UNK\nVeit Olivarez (F)\nF 71 16 Minnesota City Electricity\n- UNK\nGregory Mason (D)\nD 71 16 McMurphy Energy\n- UNK\nElias Storck (C)\nC 71 16 SK Semla U18\n- UNK\nKnut Scheutz (C)\nC 71 16 Bogla AIF U18\n- UNK\nJonny Hendrix (F)\nF 71 16 Minnesota City Electricity\n- UNK\nDmitry Kuvayev (G)\nG 71 16 Rotor Pervomayskiy U18\n- UNK\nKofi Orona (G)\nG 71 16 Cherhill Vikes\n- UNK"
需要实现:
- 移除包含
Dandre Carlton (F)在内的所有前置内容,保留该标识后的全部文本 - 统计新字符串中左括号
(的数量,得到分界点后的个体总数
已尝试gsub(paste0(".*",name),"",string)但未成功,需要通用方法适配任意分界名称。
问题分析
之前的写法失败原因是:分界名称中的()属于正则元字符,直接拼接进正则模式会被解析为分组符号,无法准确匹配目标字符串;同时.*的贪婪匹配虽然没问题,但特殊字符未转义是核心问题。
正确实现代码
1. 截取目标内容
# 定义变量 name <- "Dandre Carlton (F)" string <- x # 原始抓取字符串 # 生成安全匹配模式:\\Q和\\E包裹分界名,自动转义所有正则特殊字符 pattern <- paste0(".*\\Q", name, "\\E") # 使用sub只匹配一次分界点,截取后续内容 newstring <- sub(pattern, "", string)
执行后newstring会得到预期结果:
"\nF 71 16 Ebony Gothic Knights\n- UNK\nLynn Marez (F)\nF 71 16 Ebony Gothic Knights\n- UNK\nHynek Hoško (C)\nC 71 16 HC Kometa Železnice U18\n- UNK\nGlynn Shields (F)\nF 71 16 Chanhassen Nova Ocelots\n- UNK\nJeet Beals (C)\nC 71 16 Chanhassen Nova Ocelots\n- UNK\nVeit Olivarez (F)\nF 71 16 Minnesota City Electricity\n- UNK\nGregory Mason (D)\nD 71 16 McMurphy Energy\n- UNK\nElias Storck (C)\nC 71 16 SK Semla U18\n- UNK\nKnut Scheutz (C)\nC 71 16 Bogla AIF U18\n- UNK\nJonny Hendrix (F)\nF 71 16 Minnesota City Electricity\n- UNK\nDmitry Kuvayev (G)\nG 71 16 Rotor Pervomayskiy U18\n- UNK\nKofi Orona (G)\nG 71 16 Cherhill Vikes\n- UNK"
2. 统计个体数量
使用stringr包的str_count时,注意转义左括号(正则特殊字符):
library(stringr) individuals <- str_count(newstring, "\\(")
通用适配说明
只需修改name变量的值为任意分界标识即可,\\Q和\\E会自动处理分界名中的所有正则特殊字符(如()、.、*等),确保匹配准确,无需额外修改正则模式。
内容的提问来源于stack exchange,提问作者WickSchozen
相关产品推荐
相关产品推荐

