grep和正则表达式 - 元/通配符

时间:2012-12-13 01:24:00

标签: regex r

这是一个更大的更复杂的数据集的最小例子,只是试图让我的头脑周围。

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

现在我预计只会返回2,因为'+'应该是'前面元素中的一个或多个'。我认为逃避这个时期(我必须处理这个问题,所以希望将其保留在示例中)可能导致了这个问题。

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

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

结论:

谢谢@James。所以我的理解是+是'另外一个或多个前面的元素'而不是它实际意味着什么,它是'只需要前面一个元素的一个或多个'。

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

2 个答案:

答案 0 :(得分:6)

您需要表示在任意数量的1之后,您希望匹配字符串的结尾。您可以使用$执行此操作。

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

同样,^匹配字符串的开头,如果您想限制匹配开始X10.,而不是PX10.,例如现有的正则表达式匹配。< / p>

答案 1 :(得分:2)

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