相关疑难解决方法(0)

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

我很确定我在这里遗漏了一些明显的东西,但是我不能让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)

regex r stringr

23
推荐指数
2
解决办法
8961
查看次数

删除括号,括号和/或大括号内的文本

我需要一个提取任何类型括号的函数,即(),[],{}以及它们之间的信息.我创造它并让它做我想要的但是我得到一个恼人的警告,我不知道它意味着什么.我希望通过修复代码的错误或抑制警告来消除恼人的警告.我尝试使用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)

r

8
推荐指数
1
解决办法
3173
查看次数

标签 统计

r ×2

regex ×1

stringr ×1