正则表达式 – 非贪婪字符串正则表达式匹配
我很确定我在这里缺少一些明显的东西,但是我不能使R使用非贪心的正则表达式:
> library(stringr) > str_match('xxx aaaab yyy',"a.*?b") [,1] [1,] "aaaab" 基本功能的行为方式相同: > regexpr('a.*?b','xxx aaaab yyy') [1] 5 attr(,"match.length") [1] 5 attr(,"useBytes") [1] TRUE 我希望比赛根据http://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html中的“贪婪”评论只是ab:
有人可以解释一下我发生了什么吗? 更新.疯狂的是,在其他一些情况下,非贪婪模式的行为与预期的一样: > str_match('xxx <a href="abc">link</a> yyy <h1>Header</h1>','<a.*>') [,1] [1,] "<a href="abc">link</a> yyy <h1>Header</h1>" > str_match('xxx <a href="abc">link</a> yyy <h1>Header</h1>','<a.*?>') [,1] [1,] "<a href="abc">"
困难的概念,所以我会尽我所能…有人有空闲的编辑和解释更好,如果有点混乱.
与您的模式匹配的表达式从左到右进行搜索.是的,所有以下字符串aaaab,aaab,aab和ab都与您的模式匹配,但是aaaab是从左侧开始最多的字符串是返回的字符串. 所以这里,你的非贪心的模式不是很有用.也许这个其他的例子可以帮助你更好地了解一个非贪心的模式: str_match('xxx aaaab yyy',"a.*?y") # [,1] # [1,] "aaaab y" 这里所有的字符串aaaab y,aaaab yy,aaaab yyy匹配模式,并在同一位置开始,但第一个由于非贪心模式而返回. 那么你能做什么来抓住最后一个ab?用这个: str_match('xxx aaaab yyy',".*(a.*b)") # [,1] [,2] # [1,] "xxx aaaab" "ab" 它是如何工作的?通过添加一个贪心的模式*在前面,你现在迫使进程把最后一个可能的a进入捕获的组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |