十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

stringr七大字符串动词深度解析:detect/count/subset/locate/extract/match/replace

stringr七大字符串动词深度解析:detect/count/subset/locate/extract/match/replace stringr七大字符串动词深度解析detect/count/subset/locate/extract/match/replace【免费下载链接】stringrA fresh approach to string manipulation in R项目地址: https://gitcode.com/gh_mirrors/st/stringrstringr 是 tidyverse 生态中最受欢迎的 R 字符串操作库之一它对底层高性能库 stringi 做了贴心封装让正则匹配、文本提取与替换变得简单一致。本文带你逐一拆解 stringr 的七大字符串动词detect、count、subset、locate、extract、match、replace帮你快速建立遇到什么问题该选哪个函数的直觉。1️⃣ 为什么叫动词一张表看懂七大字符串函数官方把 stringr 的字符串处理概括为七个动词每个动词回答一个具体问题选函数就像选动词一样自然。动词回答的问题典型函数返回类型检测 detect有没有匹配str_detect()逻辑向量 TRUE/FALSE计数 count出现了几次str_count()整数向量筛选 subset哪些元素匹配str_subset()/str_which()字符串向量 / 下标定位 locate匹配在什么位置str_locate()start/end 位置矩阵提取 extract匹配的文字是什么str_extract()字符向量分组匹配 match匹配中各部分是什么str_match()字符矩阵替换 replace如何改写成新文本str_replace()/str_replace_all()字符向量所有函数都遵循同一约定第一个参数永远是字符串向量第二个是模式 pattern这让它们天然适合管道式串联。 模式默认按正则表达式解释也可以用fixed()精确匹配文本、coll()按人类文字习惯匹配、boundary()匹配词/行边界四种模式修饰器的实现都在R/modifiers.R。2️⃣ detect字符串中是否存在匹配str_detect()返回逻辑向量元素匹配返回 TRUE否则 FALSE功能上等价于基础 R 的grepl(pattern, x)但命名更一致、更好记。fruit - c(apple, banana, pear, pineapple) str_detect(fruit, a) # 含有字母 a 吗 str_detect(fruit, ^a) # 以 a 开头吗 str_detect(fruit, ^p, negate TRUE) # 反转不以 p 开头的同属该家族的常用函数源码同在 R/detect.R 中str_starts()/str_ends()只判断开头或结尾是否匹配str_like()/str_ilike()遵循 SQL 的 LIKE/ILIKE 约定必须全串匹配%和_作通配符前者区分大小写后者不区分。negate TRUE参数可以直接拿到反转结果省去手写取反。3️⃣ count模式在每段文字中出现了几次str_count()统计每个元素中 pattern 的匹配次数返回简洁的整数向量。它常与 detect 搭配detect 回答有没有count 回答有多少。str_count(c(apple, banana, pear), a) # 1 2 0小提醒统计标点、$、.这类字符时用fixed()把模式声明为精确文本可避免被正则引擎误解。实现见 R/count.R。4️⃣ subset一次性筛出所有匹配的元素str_subset()返回所有匹配的元素等价于grep(pattern, x, value TRUE)若想要下标而非字符串本身用str_which()等价于不带 value 的grep。x - c(why, video, cross, extra, deal, authority) str_subset(x, [aeiou]) # video cross extra deal authority三个实用细节支持negate TRUE直接保留不匹配的元素NA 元素永远视为不匹配不会出现在结果中数据清洗时很安全str_subset()其实只是str_detect()的一层薄封装实现仅十几行读 R/subset.R 很容易理解。5️⃣ locate匹配的起点和终点在哪里str_locate()返回第一个匹配的起始与结束位置是一个两列start、end的矩阵str_locate_all()则给出全部匹配的位置。str_locate(c(why, video, cross), [aeiou]) # start end # [1,] NA NA # [2,] 2 2 # [3,] 3 3阅读要点未匹配时整行为 NAstart 与 end 均为闭区间含两端^、$这类零长度匹配可能出现 end 小于 start配套函数invert_match()能把匹配位置反转为非匹配位置定义在 R/locate.R。locate 的矩阵输出可以直接喂给str_sub()等切片函数——输出可以直接当输入用正是 stringr 的核心设计哲学。6️⃣ extract 与 match把匹配的文字取出来str_extract()取出每段字符串中第一个完整匹配shopping - c(apples x4, bag of flour, milk x2) str_extract(shopping, [a-z]) # apples bag milk str_extract(shopping, \\d) # 4 NA 2group参数可指定返回某个捕获组的内容str_extract_all()则提取全部匹配返回列表。str_match()是进阶版模式必须至少含一个捕获组返回矩阵的第一列是完整匹配其后每列对应一个组strings - c( 219 733 8965, 329-293-8753 , banana) phone - ([2-9][0-9]{2})- .- . str_match(strings, phone)使用命名组(?area...)时矩阵列会自动带上列名后续取列更直观str_match_all()提取全部匹配返回矩阵列表。两者的分工界限非常清晰只取整块匹配文字 →str_extract()要把匹配拆成字段 →str_match()。源码分别在 R/extract.R 与 R/match.R。7️⃣ replace把匹配替换成新文本字符串流水线的最后一步往往是改写文本str_replace()只替换第一个匹配str_replace_all()替换所有匹配。fruits - c(one apple, two pears, three bananas) str_replace(fruits, [aeiou], -) # 只换第一个元音 str_replace_all(fruits, [aeiou], -) # 全部替换三种进阶玩法反向引用replacement 中可用\1、\2引用捕获组如str_replace(x, ([aeiou]), \\1\\1)把匹配到的元音翻倍函数作替换replacement 传一个函数或公式会批量作用于所有匹配串例如把颜色名统一替换为十六进制值命名向量批量替换str_replace_all()的 pattern 可传命名向量c(one 1, two 2)一次完成多组替换。另有小助手str_replace_na()把 NA 直接变成字符串 NA。实现见 R/replace.R。8️⃣ 怎么选七大字符串动词速查与组合套路你的需求选它清洗数据前判断合法性str_detect()/str_starts()统计词频、错误率str_count()保留 / 剔除某类行str_subset()/str_which()配合str_sub()截取片段str_locate()从日志、地址中抠出字段str_extract()/str_match()规范格式、脱敏改写str_replace_all()典型的数据清洗组合拳先用str_detect()过滤异常值 → 再用str_extract()提取目标字段 → 最后str_replace_all()统一格式。每个函数输出即输入整条链路可以一气呵成。 源码索引按动词分文件组织便于对照阅读R/detect.R、R/count.R、R/subset.R、R/locate.R、R/extract.R、R/match.R、R/replace.R入门示例与七大动词官方说明见README.md正则表达式教程见vignettes/regular-expressions.Rmd常见问题 Q遇到 NA 会报错吗不会。stringr 的字符串动词普遍遵循NA 进NA 出在 subset/which 中 NA 只是不参与匹配。Q正则太慢或总写错怎么办用fixed()声明精确文本匹配它最快且无需转义需要按词/行匹配时用boundary()。Q只想保留不匹配的行几乎所有检测类函数都支持negate TRUE一行反转。掌握这七个动词你就掌握了 stringr 处理文本的完整闭环发现 → 计数 → 筛选 → 定位 → 提取 → 拆分 → 改写。【免费下载链接】stringrA fresh approach to string manipulation in R项目地址: https://gitcode.com/gh_mirrors/st/stringr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表