* 与 .* 在 R 中使用正则表达式

降低

为什么R(至少与tidyverse / stringr)识别以下正则表达式:*\.(png|jpg|jpeg)(在 R 中,由于字符转义,实际上需要编写字符串"*\\.(png|jpg|jpeg)"

我认为正确的正则表达式应该是.*\.(png|jpg|jpeg)(用 R 编写".*\\.(png|jpg|jpeg)"))

当我在例如 regex101.com 上介绍第一个表达式时,它说这是一个非法的正则表达式。但是 R 似乎可以毫无问题地解析它。

为什么?

该表达式是否*\.(png|jpg|jpeg)为有效的正则表达式?如果是这样,为什么 regex101 会抱怨?如果没有,为什么 R 接受它?

维克多·斯特里比尤夫

如果您将基本 R 正则表达式函数与默认 TRE 正则表达式库一起使用,*则模式开头的 将被忽略。它与基于 POSIX 的正则表达式引擎的行为方式一致,请参阅sed演示(此工具在演示中使用 POSIX BRE)。

TRE 正则表达式引擎是基于 POSIX 的正则表达式引擎,它会忽略正则表达式*开头的 :

> gsub("*\\.png$", "", "abc.png")
[1] "abc"

但是,其他 NFA 正则表达式引擎将其视为错误:

> library(stringr)
> str_replace("abc.png", "*\\.png$", "")
Error in stri_replace_first_regex(string, pattern, fix_replacement(replacement),  : 
  Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX, context=`*\.png$`)
> gsub("*\\.png$", "", "abc.png", perl=TRUE)
Error in gsub("*\\.png$", "", "abc.png", perl = TRUE) : 
  invalid regular expression '*\.png$'
In addition: Warning message:
In gsub("*\\.png$", "", "abc.png", perl = TRUE) :
  PCRE pattern compilation error
        'quantifier does not follow a repeatable item'
        at '*\.png$'

stringrregex 函数使用ICU regex 库和基本 R regex 函数并perl=TRUE使用PCRE regex 库不是perl!)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R中使用正则表达式序列的正则表达式数据清除

在R strsplit中使用正则表达式

在gsub r中使用正则表达式模式

在R中使用哪个正则表达式?

在 R 中使用正则表达式分叉数据

在R中的Xpath中使用正则表达式

在R中使用正则表达式提取文本

在 R 中使用反向引用的正则表达式

在文本中使用R表示正则表达式IP地址

如何在R中使用正则表达式检测和删除缩写?

在R中使用正则表达式进行问题匹配标点

在R中使用正则表达式分割字符串

在R中使用正则表达式从链接中提取字符串

在R的grep中使用正则表达式不匹配

在R中使用正则表达式过滤带有时间戳的日期

在R中使用动态(可变)字符串作为正则表达式模式

在R中使用正则表达式更改数字格式

在R中使用正则表达式从字符串中获取数字

正则表达式在R拆分问题中使用rebus?

在R的正则表达式中使用组和反向引用-stringr :: str_replace

在R中使用正则表达式将数字替换为空白

在R中的正则表达式中使用变量值

在R中使用正则表达式提取圆括号中的字符串

在r中使用正则表达式在句点之后添加空间(如果不存在)

可以在R中的正则表达式替换中使用量词吗?

如何在R中使用正则表达式编辑名称?

在 R 中使用正则表达式嵌套 if-else

在R中使用正则表达式替换重复的字符串

如何在R中使用正则表达式仅获取特定数据?