In R, using data.table, I was testing if a string contains another string as follows:
library(data.table)
string1 <- "AAAAA"
string2 <- "AAA"
print(string1 %like% string2)
The above returns TRUE. But when string looks like
string1 <- "(A)_"
string2 <- "(A)_"
print(string1 %like% string2)
The above returns FALSE.
Is there any way to fix this other than removing special charaters?
CodePudding user response:
Instead of using the %like% operator, you can use the like function, which has additional arguments.
One of those arguments is fixed, which allows you to ignore regular expressions. So:
like("(A)_", "(A)_", fixed = TRUE)
returns TRUE.
Note that this is identical to how grepl behaves, which is the more common base version of like.
CodePudding user response:
?`%like%` reveals that:
Internally, like is essentially a wrapper around base::grepl
If you treat string2 as a regular expression by escaping any characters that represent special characters in a regular expression the comparison will yield the result you expect (TRUE)
string1 <- "(A)_"
string2 <- "\\(A\\)_"
print(string1 %like% string2)
