2

这是一个更大更复杂数据集的最小示例,只是试图让我了解一些东西。

> grep("X10\\.1+",c("X10.10","X10.11","X10.12"))
[1] 1 2 3

现在我本来希望只2返回,因为“+”应该是“前一个元素的 1 个或多个”。我认为逃避这个时期(我必须处理,所以想在例子中保留它)可能是导致问题的原因。

> grep("X101+",c("X1010","X1011","X1012"))
[1] 1 2 3

那么,我对'+'功能的理解是错误的吗?

结论:

谢谢@詹姆斯。所以我的理解是 + 是“前一个元素的另一个或多个”,而不是它的实际含义,即“前一个元素的一个或多个”。

11+ 会完成我的想法(在第一个 1 之后有一个额外的 1 或更多 1 等)。干杯

4

2 回答 2

6

您需要表示在任意数量的 1 之后,您想要匹配字符串的结尾。你$用来做这个。

grep("X10\\.1+$",c("X10.10","X10.11","X10.12"))
[1] 2

同样,^如果要限制匹配开始,则匹配字符串的开头X10.,而不是PX10.例如将由现有正则表达式匹配的字符串。

于 2012-12-13T01:33:02.443 回答
2

在这种情况下,前面的元素是数字“1”,它出现在所有 3 个元素中的那个位置。您之前对“+”的理解是正确的。

于 2012-12-13T01:35:28.337 回答