我很确定我在这里遗漏了一些明显的东西,但我不能让R使用非贪婪正则表达式:
>;图书馆(stringr)
&燃气轮机;str_匹配('xxx aaaab yyy',“a.*b”)
[,1]
[1,]“aaaab”
基本函数的行为方式相同:
>;regexpr('a.*b','xxx aaaab yyy')
[1] 5
属性(,“匹配长度”)
[1] 5
属性(,“useBytes”)
[1] 真的
根据中的“贪婪”注释,我希望匹配仅为abhttp://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html:
默认情况下,重复是贪婪的,因此使用最大可能的重复次数。
可以通过添加“最小值”将其更改为“最小值”?对于量词。(还有更多
允许近似匹配的量词:请参阅TRE文档。)
有人能解释一下发生了什么事吗
更新。疯狂的是,在其他一些情况下,非贪婪模式的行为与预期一致:
>;str_match('xxx<;a href='https://stackoverflow.com/questions/16577432/abc“>;链接<;/a>;yyy<;h1>;标题<;/h1>;',“<;a.*>;”)
[,1]
[1,]“<;a href=\'abc\'>;链接<;/a>;yyy<;h1>;标题<;/h1>;”
&燃气轮机;str_match('xxx<;a href='https://stackoverflow.com/questions/16577432/abc“>;链接<;/a>;yyy<;h1>;标题<;/h1>;',“<;a.*?>;”)
[,1]
[1,]“<;a href=\“abc\”>;”
困难的概念,所以我会尽我最大的努力。。。如果有点混乱,有人可以随意编辑和解释
从左到右搜索与模式匹配的表达式。是的,以下所有字符串aaaab、aaab、aab和ab都与您的模式匹配,但是aaaaaab最左边开始的字符串是返回的字符串
所以在这里,您的非贪婪模式不是很有用。也许这另一个例子可以帮助您更好地理解非贪婪模式的作用:
str_匹配('xxx aaaab yyy',“a.*y”)
# [,1]
#[1,]“aaaab y”
这里所有的字符串aaaab y,aaaab yy,aaaab yy都与模式匹配并从相同的位置开始,但由于非贪婪模式,返回了第一个字符串
那么,你能做些什么来捕捉最后的ab?使用以下命令:
str_匹配('xxx aaaab yyy',“*(a.*b)”)
# [,1] [,2]
#[1,]“xxx aaaab”“ab”
它是如何工作的?通过在前面添加贪婪模式*,您现在正在强制进程将最后一个可能的a放入捕获的组中