我很确定我在这里遗漏了一些明显的东西,但是我不能让R使用非贪婪的正则表达式:
> library(stringr)
> str_match('xxx aaaab yyy', "a.*?b")
[,1]
[1,] "aaaab"
Run Code Online (Sandbox Code Playgroud)
基本函数的行为方式相同:
> regexpr('a.*?b', 'xxx aaaab yyy')
[1] 5
attr(,"match.length")
[1] 5
attr(,"useBytes")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
我希望这场比赛符合http://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html中的ab '贪婪'评论:
默认情况下,重复是贪婪的,因此使用最大可能的重复次数.这可以通过附加改为'minimal'吗?到量词.(还有其他量词允许近似匹配:请参阅TRE文档.)
有人可以解释一下发生了什么事吗?
更新.令人抓狂的是,在其他一些情况下,非贪婪模式的行为符合预期:
> 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\">"
Run Code Online (Sandbox Code Playgroud) 我需要一个提取任何类型括号的函数,即(),[],{}以及它们之间的信息.我创造它并让它做我想要的但是我得到一个恼人的警告,我不知道它意味着什么.我希望通过修复代码的错误或抑制警告来消除恼人的警告.我尝试使用suppressWarnings(),但它不起作用,因为我认为我没有正确使用它.
此功能使用regmatches并要求R版本2.14或更高版本
这是下面的函数和重现警告的示例.感谢您的帮助.
################
# THE FUNCTION #
################
bracketXtract <- function(text, bracket = "all", include.bracket = TRUE) {
bracketExtract <- if (include.bracket == FALSE) {
function(Text, bracket) {
switch(bracket,
square = lapply(Text, function(j) gsub("[\\[\\]]", "",
regmatches(j, gregexpr("\\[.*?\\]", j))[[1]],
perl = TRUE)),
round = lapply(Text, function(j) gsub("[\\(\\)]", "",
regmatches(j, gregexpr("\\(.*?\\)", j))[[1]])),
curly = lapply(Text, function(j) gsub("[\\{\\}]", "",
regmatches(j, gregexpr("\\{.*?\\}", j))[[1]])),
all = { P1 <- lapply(Text, function(j) gsub("[\\[\\]]", "",
regmatches(j, gregexpr("\\[.*?\\]", j))[[1]],
perl = TRUE))
P2 <- lapply(Text, function(j) gsub("[\\(\\)]", …Run Code Online (Sandbox Code Playgroud)