R语言:使用Stringr与正则表达式进行字符串处理

字符串处理是数据清洗与分析中必不可少的一环。R语言中的stringr包提供了强大且易用的字符串处理函数,而正则表达式则使得字符串的匹配与替换更为灵活和高效。本文将详细介绍如何使用stringr和正则表达式来处理字符串,并提供相应的示例代码。

一、Stringr 包
1. 创建与查看
  • 查看:

    r 复制代码
    library(stringr)
    str_view("Hello World", "World")

    使用str_view可以直观地查看匹配结果,base::writeLines可以显示字符串内容。

  • 转义符 :使用\\进行转义,例如:

    r 复制代码
    # cat()函数:Concatenate and Print(连接和打印)
    cat("This is a backslash: \\")
    复制代码
    This is a backslash: \
  • 原始字符串:可以避免频繁的转义,例如:

    r 复制代码
    raw_string <- r"(\d{3}-\d{2}-\d{4})"
2. 长度与子集
  • 字符串长度:

    r 复制代码
    str_length("Hello")
    复制代码
    [1] 5
  • 按位置提取子集:

    r 复制代码
    str_sub("Hello World", 1, 5)
    复制代码
    [1] "Hello"
  • 填充字符串:

    r 复制代码
    str_pad("Hello", width = 10, side = "both", pad = "-")
    复制代码
    [1] "--Hello---"
3. 检测匹配
  • 检测匹配:返回逻辑值,注意是向量运算;可以与sum()等统计函数合用。

    r 复制代码
    str_detect(c("apple", "banana", "pear"), "a")
    复制代码
    [1] TRUE TRUE TRUE
  • 选择匹配的子集 :对于字符串向量,选出符合匹配的子集,注意与str_sub区分开。

    r 复制代码
    str_subset(c("apple", "banana", "pear"), "a")
    复制代码
    [1] "apple"  "banana" "pear"  
  • 统计匹配次数:

    r 复制代码
    str_count(c("apple", "banana", "pear"), "a")
    复制代码
    [1] 1 3 1
  • 查看匹配:

    r 复制代码
    str_view(c("apple", "banana", "pear"), "a")
4. 提取匹配
  • 提取第一个匹配项:如果没有匹配则返回NA

    r 复制代码
    str_extract("The price is $123", "\\$\\d+")
    复制代码
    [1] "$123"
  • 提取所有匹配项:

    r 复制代码
    str_extract_all("The price is $123 or $456", "\\$\\d+")
    复制代码
    [1] "$123" "$456"
  • 分组匹配:

    r 复制代码
    str_match("The price is $123", "(\\$\\d+)")
5. 修改字符串
  • 按位置替换子集:

    r 复制代码
    text <- "Hello, world!"
    str_sub(text, 1, 5) <- "Hi"
  • 转换为小写:

    r 复制代码
    str_to_lower("Hello")
  • 替换匹配项:

    r 复制代码
    str_replace("The price is $123", "\\$\\d+", "$456")
6. 连接和分割
  • 合并字符串:

    r 复制代码
    str_c("Hello", "World", sep = " ")
  • 分割字符串:

    r 复制代码
    str_split("apples,oranges,pears", ",")
7. 排序与定位字符串
  • 排序字符向量:

    r 复制代码
    str_sort(c("banana", "apple", "pear"))
  • 返回排序序号:

    r 复制代码
    str_order(c("banana", "apple", "pear"))
  • 定位匹配项:

    r 复制代码
    str_locate("The price is $123", "\\$\\d+")
二、正则表达式
1. 基础/精确匹配

最简单的正则表达式是匹配一个精确的字符串,如apple。

2. 条件
  • "或"匹配:

    r 复制代码
    str_detect(c("apple", "banana", "pear"), "apple|banana")
  • "之一"匹配:

    r 复制代码
    str_detect(c("apple", "banana", "pear"), "[aeiou]")
3. 锚点 (始于权力^(power),终于金钱$)
  • 开始匹配:

    r 复制代码
    str_detect("apple", "^a")
  • 结尾匹配:

    r 复制代码
    str_detect("apple", "e$")
4. 量词
  • 出现0次或1次:

    r 复制代码
    str_detect(c("color", "colour"), "colou?r")
  • 出现1次或更多:

    r 复制代码
    str_detect(c("apple", "aple"), "ap+le")
5. 特殊字符集合
  • 匹配任何数字(digit):

    r 复制代码
    str_detect("123abc", "\\d")
  • 匹配空白字符(space):

    r 复制代码
    str_detect("a b", "\\s")
6. 分组与回溯引用
  • 分组匹配:

    r 复制代码
    str_match("The price is $123", "(\\$\\d+)")
  • 回溯引用:

    r 复制代码
    str_replace("abab", "(ab)\\1", "cd")
相关推荐
hqyjzsb4 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯
kaiyou20264 小时前
数据分析岗面试,如何把考证学到的知识讲成业务案例?
面试·数据挖掘·数据分析
2601_966949654 小时前
股票池发生变化后,如何高效更新行情数据?从全量刷新到增量同步
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
松果集4 小时前
(六)SPSS非参数检验
大数据·数据分析·数据可视化
SL_staff5 小时前
从钉钉日报到动态数据看板:面向业务侧的低代码BI实践路径
java·数据分析·数据可视化
2601_962780916 小时前
用户研究校招备考路线|问卷、访谈、可用性测试项目与数据分析工具
数据挖掘·数据分析·可用性测试
SelectDB6 小时前
ELK 做不了的分析,我用 Doris 物化视图补上了:配置、开关与四个排错现场
大数据·数据库·数据分析
SelectDB6 小时前
Agent 日志检索慢、存储还贵?search() + VARIANT 的落地命令和几个当场踩出来的问题
大数据·数据库·数据分析
SelectDB6 小时前
ClickHouse 存日志踩过的并发坑:压测脚本、检索写法与排错命令
大数据·数据库·数据分析
SelectDB6 小时前
NESTED 怎么搜 VARIANT 里的嵌套数组:一份可直接复制的统一引擎实战笔记
大数据·数据库·数据分析