意外的正则表达式匹配在R中

时间:2016-01-13 17:00:14

标签: regex r

在尝试使用grepl对数据框进行子集时,我遇到了一些意外行为(至少对我而言)。以下是举例说明问题:

> myVec <- c("ISB*", "ISNB*")
> myDF <- data.frame(Source = rep(myVec, 5, 2), Value = 1:10)
> print(myDF)
   Source Value
1    ISB*     1
2   ISNB*     2
3    ISB*     3
4   ISNB*     4
5    ISB*     5
6   ISNB*     6
7    ISB*     7
8   ISNB*     8
9    ISB*     9
10  ISNB*    10
> myDF.b <- myDF[grepl("ISB*", myDF$Source), ]
> print(myDF.b)
   Source Value
1    ISB*     1
2   ISNB*     2
3    ISB*     3
4   ISNB*     4
5    ISB*     5
6   ISNB*     6
7    ISB*     7
8   ISNB*     8
9    ISB*     9
10  ISNB*    10
> myDF.nb <- myDF[grepl("ISNB*", myDF$Source), ]
> print(myDF.nb)
   Source Value
2   ISNB*     2
4   ISNB*     4
6   ISNB*     6
8   ISNB*     8
10  ISNB*    10

当我创建myDF的子集来创建myDF.b时,我使用grepl("ISB*", myDF$Source), ]。现在,我期望的是它只抓取ISB*行,但它抓住了所有行。我意识到ISNB*包含与ISB*相同顺序的所有相同字母,但我很惊讶地看到中间的N没有丢弃{{1}从匹配它。我希望greplISB*N匹配,但不能与中间的ISB*匹配。

这是正常行为还是我缺少一个论点?提前谢谢。

1 个答案:

答案 0 :(得分:3)

我们需要转义// get the color(s) you provided for the chart List<Integer> colors = chart.getData().getDataSetByIndex(dataSetIndex).getColors(); int newcolor = Color.RED; colors.set(e.getXIndex(), newcolor); // replace the color at the specified index chart.invalidate(); // refresh ,因为它是一个特殊字符,意味着零或更多。

*

或者@Pierre Lafortune提到,myDF[grepl("ISB\\*", myDF$Source), ] 可以使用(会更快)

fixed=TRUE