R 正则表达式

前言

R中的正则表达式模式有三种

  • 1、扩展正则表达式:默认方式
  • 2、Perl风格正则表达式:设置参数 perl = TRUE
  • 3、字面意义正则表达式:设置参数fixed = TRUE,使用的字面意义上的正则表达式

基本字符

R中的元字符包括:

 . \ | ( ) [ ] ^ $ * + ?

这些字符的含义与Python一样

  • .: 表示任意字符,包括换行符
  • \: 对字符进行转义
  • |: A|BAB其中一个匹配,A匹配成功则不匹配B
  • (): 字符组,括号中的模式作为一个整体进行匹配
  • []: 字符集合
  • ^: 匹配字符串开头,在[^6]表示取反,所有不是6的字符
  • $: 匹配字符串结尾

数量词

  • *: 前一个规则匹配0或无限次
  • +: 前一个规则匹配1或无限次
  • ?: 前一个规则匹配0或1次
  • {m}: 前一个规则匹配m次
  • {m,n}: 前一个规则匹配m~n次,尽可能多
  • {m,}: 前一个规则匹配m次以上,尽可能多

非贪婪模式

  • 上述数量词后加?,匹配到满足规则的字符尽量少

实例

下面实例使用grepl函数

grepl <- function (pattern, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, 
    useBytes = FALSE) 
{
    if (!is.character(x)) 
        x <- as.character(x)
    .Internal(grepl(as.character(pattern), x, ignore.case, FALSE, 
        perl, fixed, useBytes, FALSE))
}

"""
@argument:
  pattern: 匹配规则
  x: 需要去匹配的字符串
  ignore.case: 忽略大小写
  perl: perl 语言的匹配模式
  fixed: 使用的字面意义上的正则表达式
  useBytes: 匹配字节
@return
  匹配成功返回 TRUE,否则返回 FALSE
"""

1、符号 .

grepl('ab.', 'abc')
# out: TRUE

grepl('abc', 'Abc', ignore.case = TRUE)
# out: TRUE

grepl('ab.*', 'abcdba', fixed = T)
# out: FALSE

2、反斜杠 \

R中的反斜杠和Python中反斜杠会有所区别

R中定义的转义字符串有:

'\n': 换行
'\r': 回车
'\t': 制表符
'\b': 退格
'\a': 响铃
'\f': 换页
'\v': 垂直制表符
'\\': 反斜杠
'\'': 单引号
'\"': 双引号
'\`': 反引号
'\nnn': 八进制字符(1~3位置的n为八进制数字)
'\xnn': 十六进制字符(1~2位置的n为十六进制数字)
'\unnnn': 十六进制字符(1~4)
'\Unnnnnnnn': 十六进制字符(1~8)

如果反斜线后的转义字符串不在上表范围内,系统就会报错.

要在字符常量中输入反斜线,需要输入两个反斜线,即 \\

grepl('ab\\[', 'ab[]')
# out: TRUE

grepl('ab\\\\', 'ab\\')
# out: TRUE

grepl('ab\.', 'ab.')
# Error: 由"'ab\."开头的字符串中存在'\.',但没有这种逸出号

3、析取 |

grepl('ab|c', c('ab', 'ac', 'a'))
# out: TRUE TRUE FALSE

4、组合 ()

grepl('(a.)+c', c('ac', 'acc'))
# out: FALSE TRUE 

反向引用,只能在使用小括号是才能使用

grepl('c(..) s\\1', c('cat sat', 'cat saa'))
# out: TRUE FALSE

5、字符集合 []

grepl('[Tt]he', c('the', 'The'))
# out: TRUE TRUE

# 范围:a-z 表示 26 个小写字母
grepl('[a-z]he', c('the', 'she', 'The'))
# out: TRUE TRUE FALSE

# 取反,所有不是 t 的字符
grepl('[^t]he', c('the', 'she', 'The'))
# out: FALSE TRUE TRUE

# 特殊字符失去特殊含义,. 不再表示任意字符
grepl('[.]he', c('the', '.he'))
# out: FALSE TRUE

6、边界 ^ $

grepl('[Tt]he', c('the', 'The', 'other'))
# out: TRUE TRUE TRUE

grepl('^[Tt]he', c('the', 'The', 'other'))
# out: TRUE TRUE FALSE

grepl('[Tt]he$', c('the', 'The', 'other'))
# out: TRUE TRUE FALSE

7、数量词 * + ? {}

grepl('.*', 'abcdba')
# out: TRUE

grepl('.*', '')
# out: TRUE

grepl('.+', 'abcdba')
# out: TRUE

grepl('.+', '')
# out: FALSE

grepl('ab?', 'a')
# out: TRUE

grepl('ab?', 'ab')
# out: TRUE

grepl('ab{3}', 'abbb')
# out: TRUE

grepl('ab{3}', 'abb')
# out: FALSE

grepl('ab{3,5}', 'abbbb')
# out: TRUE

grepl('ab{3, }', 'abbbb
grepl('ab{3,    }', 'abbbb')
grepl('ab{3,}', 'abbbb')
grepl('ab{,4}', 'abbbb')
# out: TRUE

非贪婪模式

sub<-function (pattern, replacement, x, ignore.case = FALSE, perl = FALSE, 
    fixed = FALSE, useBytes = FALSE) 
{
    if (!is.character(x)) 
        x <- as.character(x)
    .Internal(sub(as.character(pattern), as.character(replacement), 
        x, ignore.case, perl, fixed, useBytes))
}

"""
sub 函数 与 grepl 函数参数基本一致
将匹配到的字符串替换为 replacement 参数指定的数据
"""

sub('ab{3,8}', '', 'abbbbbbbc')
# out: 'c'

sub('ab{3,8}?', '', 'abbbbbbbc')
# out: 'bbbbc'

有了 Python 正则的铺垫,R 的正则看起来是不是很得心应手。

正则表达式速查表

image.png

stringr 速查表,里面也有正则表达式的内容

image.png

image.png

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好!关于学习R语言正则表达式,我可以为您提供一些建议和资源。首先,了解正则表达式的基本概念是很重要的。正则表达式是一种用于匹配和操作文本的强大工具,可以帮助您在R语言中进行字符串处理和模式匹配。 以下是一些学习R语言正则表达式的步骤和资源: 1. 学习正则表达式基础知识:了解正则表达式的基本语法、元字符和常见模式,如字符类、量词、位置限定符等。可以查阅教程、博客文章或在线资源来学习这些概念。 2. 使用R中的正则表达式函数:R语言提供了许多内置的正则表达式函数,如`grep()`、`grepl()`、`gsub()`等。了解这些函数的用法和参数,并尝试在实际数据中应用它们。 3. 练习和实践:通过解决实际问题来加深对正则表达式的理解。可以尝试编写一些简单的模式匹配任务,如提取特定模式的字符串、替换特定模式等。 4. 学习常见的正则表达式技巧:掌握一些常见的正则表达式技巧,如使用分组、捕获组、反向引用等。这些技巧可以帮助您更高效地处理复杂的模式匹配任务。 5. 利用在线工具和练习平台:有一些在线工具和练习平台可以帮助您练习和测试正则表达式。如Regex101、Regexr等,它们提供了实时反馈和测试环境,可以帮助您验证和调试自己的正则表达式模式。 最后,我还可以推荐一些学习资源供您参考: - R语言正则表达式官方文档:https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html - R语言字符串处理教程:https://www.r-bloggers.com/2012/06/r-string-processing/ - "Mastering Regular Expressions"(《精通正则表达式》)一书,由Jeffrey E. F. Friedl撰写。 祝您学习顺利!如果您有任何进一步的问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名本无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值