Advertisement
celestialgod

regexp question (my solution)

Nov 9th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.46 KB | None | 0 0
  1. library(pipeR)
  2. library(stringr)
  3.  
  4. set.seed(20)
  5. str_candidates <- c(
  6.   str_c("{", replicate(30L, str_c(sample(letters, sample(5:20, 5L), TRUE), collapse = "")), "}"),
  7.   str_c("{{", replicate(30L, str_c(sample(letters, sample(5:20, 5L), TRUE), collapse = "")), "}}"),
  8.   str_c("{{", replicate(30L, str_c(sample(letters, sample(5:20, 5L), TRUE), collapse = "")), ":",
  9.         str_c(rep(" ", sample(4, 1L)), collapse = ""),
  10.         replicate(30L, str_c(sample(c(letters, str_split("/*-+=~!@#$%^&*`?", "")[[1]]), sample(5:20, 5), TRUE),
  11.                             collapse = "")), "}}"),
  12.   str_c("<", replicate(30L, str_c(sample(letters, sample(5:20, 5L), TRUE), collapse = "")), ">"),
  13.   letters, LETTERS
  14. )
  15.  
  16. N <- 10000L
  17. n <- 50L
  18.  
  19. a <- replicate(N, sample(str_candidates, n, TRUE) %>>% str_c(collapse=" "), simplify = TRUE)
  20. a2 <- a %>>% str_replace_all("\\{\\{([^: ]+)([^{}]+)?\\}\\}", "\\{\\{\\1\\}\\}") %>>%
  21.   str_replace_all("([^{}]+)\\{[^{}]+\\}", "\\1") %>>%
  22.   str_replace_all("^\\{[^{}]+\\}\\s?([^{}]+)?", "\\1") %>>%
  23.   str_replace_all("([^<]+)?<[^<>]*>\\s?", "\\1")
  24.  
  25. all.equal(str_split(a, " ") %>>% laply(function(x) sum(str_detect(x, "^[a-zA-Z]$"))),
  26.           str_split(a2, " ") %>>% laply(function(x) sum(str_detect(x, "^[a-zA-Z]$")))) # TRUE
  27. str_detect(a2, "<[^<>]*>") %>>% any # FALSE
  28. str_detect(a2, "[^\\{]\\{[^{}]*\\}[^\\}]") %>>% any # FALSE
  29. str_detect(a2, "^\\{[^{}]*\\}[^\\}]") %>>% any # FALSE
  30. str_detect(a2, "[^\\{]\\{[^{}]*\\}$") %>>% any # FALSE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement