/ Detekcia opakovania čísla v R pomocou reg. Regex, r

Zisťovanie počet opakovaní v R pomocou regex - regex, r

Nemal by tento kód fungovať na opakované zisťovanie čísla v R?

> grep(pattern = "\d{2}", x = 1223)
[1] 1
> grep(pattern = "\d{3}", x = 1223)
[1] 1

Ak máme 988, mali by sme sa splniť, a ak by sme mali sfalšovať 123.

Znie to, akoby to nebolo.

> grep(pattern = "\d{2}", x = "1223")
[1] 1
> grep(pattern = "\d{2}", x = "13")
[1] 1

odpovede:

4 pre odpoveď č. 1

Musíte použiť spätné odkazy:

> 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)

EDIT: Vyzerá to, že musíte zistiť, ako to funguje: (\d) vytvára a zachytiť skupinu pre \d, na ktoré sa dá odkazovať pomocou spätného odkazu \1, Napríklad, ak máte podobné čísla x2y a chcete nájsť tie, kde x je rovnaká ako y, potom:

> grep(pattern = "(\d)2\1", x = "121")
[1] 1
> grep(pattern = "(\d)2\1", x = "124")
integer(0)

Dôrazne odporúčame prečítať si základnú príručku regulárne výrazy.


1 pre odpoveď č. 2

Viem, že otázka výslovne hovorí „pomocou regulárneho výrazu“ v názve, ale tu je metóda bez regulárneho výrazu, ktorá môže fungovať v závislosti od toho, čo chcete urobiť.

strings <- c("1223","1233","1234","113")

# detect consecutive repeat digits, or characters
(strings.rle <- lapply(strings, function(x)rle(unlist(strsplit(x,"")))))

[[1]]
Run Length Encoding
lengths: int [1:3] 1 2 1
values : chr [1:3] "1" "2" "3"

[[2]]
Run Length Encoding
lengths: int [1:3] 1 1 2
values : chr [1:3] "1" "2" "3"

[[3]]
Run Length Encoding
lengths: int [1:4] 1 1 1 1
values : chr [1:4] "1" "2" "3" "4"

[[4]]
Run Length Encoding
lengths: int [1:2] 2 1
values : chr [1:2] "1" "3"

Teraz môžete pracovať strings.rle robiť, čo chcete

# which entries have consecutive repeat digits, or characters
strings[sapply(strings.rle, function(x) any(x$lengths > 1))]
[1] "1223" "1233" "113"

alebo

# which digits or characters are consecutively repeated?
lapply(strings.rle, function(x) x$values[which(x$lengths > 1)])
[[1]]
[1] "2"

[[2]]
[1] "3"

[[3]]
character(0)

[[4]]
[1] "1"