我尝试使用 strsplit(str, '[,-\\+]')
拆分字符串,这意味着任何 ',', '-' or '+'
可以是分隔符。但是,我发现这种模式似乎也匹配数字和大写字母。
尝试
grep('[,-\\]', 'X'), returns 1
grep('[,-\\]', '46'), returns 1
grep('[,-\\]', '-'), returns 1
grep('[,-\\]', ','), returns 1
好像是
'[,-\\]'
匹配所有数字,大写字母,','
和 '-'
.我只是不明白为什么会这样。
感谢您的任何意见
最佳答案
你需要使用
strsplit(str, '[,+-]')
拆分
,
+
或 -
.如需添加\
要拆分,请使用 '[,\\+-]'
使用默认的 TRE 正则表达式引擎。当
-
位于括号表达式的末尾(或开头),它被解析为文字连字符。在您的情况下,它被视为范围运算符和 '[,-\\]'
匹配 ,
之间的一系列字符和 \
:请注意,您在此处使用了 TRE 正则表达式风格(因为未指定
perl=TRUE
),因此,双反斜杠被视为正则表达式模式中的文字反斜杠。 "[,-\\]"
如果您使用 PCRE 正则表达式引擎来解析模式,则模式将无效,您需要在字符串文字中定义一个带有 4 个反斜杠的反斜杠。
关于r - 为什么 '[,-\\]' 匹配 '46' , 'X' , 'A' ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439407/