【发布时间】:2013-07-19 05:08:56
【问题描述】:
我不太明白为什么这不会导致 "test" 并希望得到解释:
a = "blah test"
sub('^.*(test|$)', '\\1', a)
# [1] ""
将其与sed 表达式进行比较:
echo 'blah test' | sed -r 's/^.*(test|$)/\1/'
# test
echo 'blah blah' | sed -r 's/^.*(test|$)/\1/'
#
Fwiw,以下实现了我在R中想要的(相当于上面的sed结果):
sub('^.*(test)|^.*', '\\1', a)
【问题讨论】:
-
@agstudy 我正在尝试匹配
test或行尾 - 正如您所看到的sed理解该逻辑。我不明白你为什么这么说(test|$) == $?我添加了我想要的编辑。 -
@agstudy 强调我不理解您写的内容,尝试运行
sub('(test|$)', 'bb', a),R 肯定不会将其解释为与sub('$', 'bb', a)相同 -
虽然这不会改变结果,但需要注意的一点是 R 使用扩展的正则表达式,而 sed(Ubuntu 12.04 64 位上的 4.2.1)默认使用基本的正则表达式。正如我所说,
echo 'blah test' | sed -r 's/^.*(test|$)/\1/')产生相同的输出。 -
@JoshuaUlrich 谢谢,已更改