这段代码不应该适用于 R 中的重复数字检测吗?
> grep(pattern = "\\d{2}", x = 1223)
[1] 1
> grep(pattern = "\\d{3}", x = 1223)
[1] 1
Run Code Online (Sandbox Code Playgroud)
如果有 988,我们应该得到 true;如果有 123,我们应该得到 false。
听起来好像不是。
> grep(pattern = "\\d{2}", x = "1223")
[1] 1
> grep(pattern = "\\d{2}", x = "13")
[1] 1
Run Code Online (Sandbox Code Playgroud)
您需要使用反向引用:
> grep(pattern = "(\\d)\\1", x = "1224")
[1] 1
> grep(pattern = "(\\d)\\1{1,}", x = "1224")
[1] 1
> grep(pattern = "(\\d)\\1", x = "1234")
integer(0)
Run Code Online (Sandbox Code Playgroud)
编辑:似乎您需要弄清楚它是如何工作的: 为 ,(\\d)创建一个捕获组\\d,可以使用反向引用来引用\\1。例如,如果您有类似的数字x2y,并且想要查找与x相同的数字y,则:
> grep(pattern = "(\\d)2\\1", x = "121")
[1] 1
> grep(pattern = "(\\d)2\\1", x = "124")
integer(0)
Run Code Online (Sandbox Code Playgroud)
我强烈建议您阅读有关正则表达式的基础教程。