grepl doesn't work as exepcted

For some reason's, the following code returns FALSE

grepl("Операційна підтримка у наданні стратегічних консультацій щодо реформування сектору цивільної безпеки України (2019-2021рр.) "
      ,  "№ 3922-10 Операційна підтримка у наданні стратегічних консультацій щодо реформування сектору цивільної безпеки України (2019-2021рр.)                                                          Підстава: Рамкова Угода між Урядом України і Комісією Європейських Співтовариств від 12.12.2006,")

Why does this happen if the string 2 definetely contains the string 1?

This works straightforwardly as you might expect ...

grepl("b c","a b c d")

but when you introduce punctuation ...

grepl("b. (c)","a b. (c) d")

this is what you are dealing with, the regex/pattern part needs escaping
like this

grepl("b\\. \\(c\\)","a b. (c) d")

if you want to detect exact literals you may prefer the options that library(stringr) within library(tidyverse) allows. i.e.

library(stringr)
str_detect(pattern = fixed("b. (c)"),string  = "a b. (c) d")
1 Like

Thank you, this is exactly what I needed (to detect literals)

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.