a = "blah test"sub('^.*(test|$)','\1',a)# [1] ""
将它与sed表达式进行比较:
echo 'blah test' | sed -r 's/^.*(test|$)//'# testecho 'blah blah' | sed -r 's/^.*(test|$)//'#
Fwiw,以下实现了我想要的R(并且相当于上面的sed结果):
sub('^.*(test)|^.*',a)解决方法 正则表达式引擎的开头匹配字符串末尾的所有字符,即贪婪.*,然后它尝试匹配(test | $),即字符串文字’test’或字符串的结尾.由于.*的第一个贪婪匹配匹配所有字符,它反向引用一个字符,然后再次尝试匹配(test | $),这里$匹配字符串的结尾.
使您的匹配结果成为行尾字符
我认为sed使用POSIX NFA试图在Alternation中找到最长的匹配,这与R不同,R似乎使用了传统的NFA
总结以上是内存溢出为你收集整理的R vs sed正则表达式贪婪全部内容,希望文章能够帮你解决R vs sed正则表达式贪婪所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)