R gsub中的负前瞻
在最近的一个场景中,我想提取url向量的最后一部分。 例如R gsub中的负前瞻,r,regex,R,Regex,在最近的一个场景中,我想提取url向量的最后一部分。 例如 基本上,我在寻找第一个示例中返回结果的regexp逻辑,但只使用一个gsub调用。我首选的方法是用字符串的一部分替换整个字符串,如下所示: gsub("^.*/([^/]+/)$", "\\1", urls) \\1匹配内部匹配的内容。 因此,基本上我用url的最后一部分替换整个字符串。我更喜欢的方法是用字符串的部分替换整个字符串,如下所示: gsub("^.*/([^/]+/)$&q
基本上,我在寻找第一个示例中返回结果的regexp逻辑,但只使用一个gsub调用。我首选的方法是用字符串的一部分替换整个字符串,如下所示:
gsub("^.*/([^/]+/)$", "\\1", urls)
\\1匹配内部匹配的内容。
因此,基本上我用url的最后一部分替换整个字符串。我更喜欢的方法是用字符串的部分替换整个字符串,如下所示:
gsub("^.*/([^/]+/)$", "\\1", urls)
\\1匹配内部匹配的内容。
因此,基本上我用url的最后一部分替换整个字符串。要仅获得匹配,您仍然可以使用lookahead结构:
^.*/(?=[^/]*/$)
^字符串的开头
*/匹配到最后一个/
?=正向前瞻,断言右边的是
[^/]*/$assert右边的值是除/以外的任何字符的0+倍,然后在字符串末尾匹配/
近距离前瞻
|
比如说
gsub('^.*/(?=[^/]*/$)', '', urls, perl = TRUE)
使用负前瞻的选项:
^.*/(?!$)
^字符串开头
.*/匹配最后一个/
?!$ 负向前看,断言直接向右的不是字符串的结尾
要仅获取匹配项,您仍然可以使用前瞻结构:
^.*/(?=[^/]*/$)
^字符串的开头
*/匹配到最后一个/
?=正向前瞻,断言右边的是
[^/]*/$assert右边的值是除/以外的任何字符的0+倍,然后在字符串末尾匹配/
近距离前瞻
|
比如说
gsub('^.*/(?=[^/]*/$)', '', urls, perl = TRUE)
使用负前瞻的选项:
^.*/(?!$)
^字符串开头
.*/匹配最后一个/
?!$ 负向前看,断言直接向右的不是字符串的结尾
非正则表达式&非常快速的解决方案是使用basename: 或者,对于您的情况:
paste0(basename(urls), '/')
[1] "hij/" "lmn/" "opr/"
非正则表达式&非常快速的解决方案是使用basename: 或者,对于您的情况:
paste0(basename(urls), '/')
[1] "hij/" "lmn/" "opr/"
sub.*/[^/]*/$,\\1,URL谢谢Wiktor。好像我迷路了。如果您将此作为一个带有1-2行文本的答案添加,我将接受它作为答案。您也可以使用前瞻,尽管效率较低^.*[^/]+/?=[^/]*/$Thork@Thefourthbird。事实上,这是一个练习,在学习看头和消极的看头,所以这是一个多一点我喜欢。虽然我希望这是一个答案,而不是一个评论。我会听从我的话,接受你的答案,即使它是重复的。尽管我会撤销对任何使用负面表情给出例子的人的接受,这样我就能看出我的逻辑在哪里失败了-sub.*/[^/]*/$,\\1,URL谢谢Wiktor。好像我迷路了。如果您将此作为一个带有1-2行文本的答案添加,我将接受它作为答案。您也可以使用前瞻,尽管效率较低^.*[^/]+/?=[^/]*/$Thork@Thefourthbird。事实上,这是一个练习,在学习看头和消极的看头,所以这是一个多一点我喜欢。虽然我希望这是一个答案,而不是一个评论。我会听从我的话,接受你的答案,即使它是重复的。尽管我会撤销对任何使用负面表情给出例子的人的接受,这样我就能看出我的逻辑在哪里失败了-很快就会清除:这比使用简单的微基准点替换火柴快40%左右。谢谢,如果没有人给出“消极前瞻”的答案,我会接受这个答案。@Oliver好吧,使用消极前瞻可能是^.*/!$因此,您可以回溯到倒数第二个/断言它不是倒数第二个/才起作用。删除冗余^it比“向前看”要稍微快一点。我不知道你可以用消极的前瞻来简单地断言不在最后。整洁的很快就会清除:这比使用简单的微基准点替换火柴快40%左右。谢谢,如果没有人给出“消极前瞻”的答案,我会接受这个答案。@Oliver好吧,使用消极前瞻可能是^.*/!$因此,您可以回溯到倒数第二个/断言它不是倒数第二个/才起作用。删除冗余^it比“向前看”要稍微快一点。我不知道你可以用消极的前瞻来简单地断言不在最后。整洁的