r - 为什么 '[,-\\]' 匹配 '46' , 'X' , 'A' ,

标签 r regex

我尝试使用 strsplit(str, '[,-\\+]') 拆分字符串,这意味着任何 ',', '-' or '+'可以是分隔符。但是,我发现这种模式似乎也匹配数字和大写字母。
尝试

  • grep('[,-\\]', 'X'), returns 1
  • grep('[,-\\]', '46'), returns 1
  • grep('[,-\\]', '-'), returns 1
  • grep('[,-\\]', ','), returns 1

  • 好像是'[,-\\]'匹配所有数字,大写字母,',''-' .

    我只是不明白为什么会这样。

    感谢您的任何意见

    最佳答案

    你需要使用

    strsplit(str, '[,+-]')
    

    拆分 , +- .如需添加\要拆分,请使用 '[,\\+-]'使用默认的 TRE 正则表达式引擎。

    -位于括号表达式的末尾(或开头),它被解析为文字连字符。在您的情况下,它被视为范围运算符和 '[,-\\]'匹配 , 之间的一系列字符和 \ :

    enter image description here

    请注意,您在此处使用了 TRE 正则表达式风格(因为未指定 perl=TRUE),因此,双反斜杠被视为正则表达式模式中的文字反斜杠。 "[,-\\]"如果您使用 PCRE 正则表达式引擎来解析模式,则模式将无效,您需要在字符串文字中定义一个带有 4 个反斜杠的反斜杠。

    关于r - 为什么 '[,-\\]' 匹配 '46' , 'X' , 'A' ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439407/

    相关文章:

    r - 如何为 r 中两个数据帧之间的匹配观察分配相同的唯一 ID?

    r - 每个域仅保留一行

    python - 按行分块大字符串的最佳方法

    javascript - 如何在 Angular2 中使用正则表达式制作管道?

    r - 如何找到特定字符两侧的子字符串并替换为 R 中相同长度的文本?

    java - 如何映射 url 中的项目列表 RequestMapping

    r - ggplot2 和 sf : geom_sf_text within limits set by coord_sf

    r - 在 R 中使用聚合函数时波浪号和 "by"之间的区别

    R scale_manual 使用2个字母作为点形

    java - 如何检查字符串是否只包含字母、数字和双反斜杠