加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 非贪婪字符串正则表达式匹配

发布时间:2020-12-14 06:29:49 所属栏目:百科 来源:网络整理
导读:我很确定我在这里缺少一些明显的东西,但是我不能使R使用非贪心的正则表达式: library(stringr) str_match('xxx aaaab yyy',"a.*?b") [,1] [1,] "aaaab" 基本功能的行为方式相同: regexpr('a.*?b','xxx aaaab yyy')[1] 5attr(,"match.length")[1] 5attr(,"u
我很确定我在这里缺少一些明显的东西,但是我不能使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:

By default repetition is greedy,so the maximal possible number of repeats is used.
This can be changed to ‘minimal’ by appending ? to the quantifier. (There are further
quantifiers that allow approximate matching: see the TRE documentation.)

有人可以解释一下我发生了什么吗?

更新.疯狂的是,在其他一些情况下,非贪婪模式的行为与预期的一样:

> 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进入捕获的组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读