rm_between与观察中的多个标记

时间:2015-06-29 15:43:22

标签: regex r qdapregex

这里有一些有用的答案,关于在每个观察只有一个标记实例时使用rm_between。但是我有一个数据集,我想在“”中提取东西,而一些观察有多个实例。例如:

新鲜或冷藏的大西洋鲑鱼“Salmo salar”和多瑙河鲑鱼“Hucho hucho”

当我使用此代码时,

library(qdapRegex)
rf <- data.frame(rm_between_multiple(H2$SE_DESC_EN, c("\"", "\""), c("\"", "\""))) 

它创建了一个数据框,并为之前的同一行创建了

 "Fresh or chilled Atlantic salmon and Danube salmon" 
返回

是完美的。但是,我需要缺少数据。要尝试保留它,我会稍微更改我的代码:

H3 <- rm_between_multiple(H2$SE_DESC_EN, c("\"", "\""), c("\"", "\""), extract=TRUE) 

使用引号中的数据创建列表。返回的同一行是:

c("Salmo salar", " and Danube salmon ", "Hucho hucho", 
  "Salmo salar", " and Danube salmon ", "Hucho hucho") 

其中包含报价中的数据,但在报价之间也有一些信息,并且正在重复。我在编程方面相当新,并且想知道是否有办法编写不包含这些引用之间信息的代码。

1 个答案:

答案 0 :(得分:0)

我认为您不需要rm_between x <- 'Fresh or chilled Atlantic salmon "Salmo salar" and Danube salmon "Hucho hucho"' rm_default( x, pattern = S("@rm_between", '"'), extract=TRUE ) ## [[1]] ## [1] "\"Salmo salar\"" "\"Hucho hucho\"" 。使用相同的左右标记I'm not sure if this is a bug yet似乎也存在正则表达式问题。现在您可以使用以下内容提取

rm_between

修改我认为这是因为"(?<=\").*?(?=\")"的默认正则表达式不包括左/右边界。这使用以下正则表达式" and Danube salmon "。前瞻的使用导致左/右边界不被消耗,因此允许引号可用于:rm_between。这是(IMO)我将解决的一个错误,但我不确定如何。

编辑2 我将@ hwnd的回复纳入if (!require("pacman")) install.packages("pacman"); library(pacman) p_install_gh("trinker/qdapRegex"); p_load(qdapRegex) qdapRegex 的开发版本。您可以通过以下方式安装开发版本:

rm_between(x, '"', '"', extract = TRUE)

## [[1]]
## [1] "Salmo salar" "Hucho hucho"

和......

enquire.register("screen and (max-width: 48rem)", {

  // REQUIRED
  // Triggered when the media query transitions
  // from *unmatched* to *matched*
  match : function() { 
      Headroom.options = {
         offset : 0, };
  },

  // OPTIONAL   
  // Triggered when the media query transitions 
  // from a *matched* to *unmatched*                        
  unmatch : function() {

Headroom.options = {
         offset : 137, };

  },    

  // OPTIONAL
  // Triggered once immediately upon registration of handler
  setup : function() {

  },      

  // OPTIONAL
  // Defaults to false
  // If true, defers execution of the setup function
  // until the first media query is matched (still just once)
  deferSetup : true           
});