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")
相关推荐
前端李易安2 小时前
正则表达式应用场景与常用正则验证方法汇总
正则表达式
LHNC3 小时前
2024.9.29 问卷数据分析
数据分析
知识分享小能手3 小时前
mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
大数据·开发语言·数据库·sql·学习·mysql·数据分析
HoneyMoose4 小时前
正则表达式匹配英文字符
正则表达式
bin915310 小时前
【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别
大数据·前端·数据库·信息可视化·数据分析·excel·数据可视化
人生の三重奏19 小时前
正则表达式(补充)
正则表达式
PhyliciaFelicia21 小时前
基于R语言机器学习遥感数据处理与模型空间预测
开发语言·深度学习·随机森林·机器学习·数据分析·r语言
bin91531 天前
【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。
信息可视化·数据挖掘·数据分析·excel·数据可视化·数据图表·excel 数据分析
技术猿188702783511 天前
淘宝商品详情API接口多线程调用:解锁数据分析行业的效率新篇章
数据挖掘·数据分析