Апострофы и необязательный аргумент (?) в grep vs agrep

Когда я запускаю следующие 4 строки кода, я не получаю одинаковый результат для всех 4. Почему последняя строка не находит совпадения?

grep("CPA's", c("CPA's"))
agrep("CPA's", c("CPA's"))

grep("CPA'?s?", c("CPA's"))
agrep("CPA'?s?", c("CPA's"))

Я еще не прочитал полностью о функциях нечеткого сопоставления, но, на первый взгляд, я не понимаю, почему это может быть проблемой.


person BeerSharkBot    schedule 10.12.2019    source источник


Ответы (1)


Поскольку разница больше, чем значение по умолчанию max.distance, равное 0,1. Увеличьте max.distance, и он захватит его.

agrep("CPA'?s?", "CPA's", max.distance = 0.15)
#[1] 1

Чтобы рассматривать шаблон как регулярное выражение, выберите fixed = FALSE, который будет работать напрямую.

agrep("CPA'?s?", "CPA's", fixed = FALSE)
person Ronak Shah    schedule 10.12.2019
comment
Я идиот. Я не знал, что значение по умолчанию для фиксированного аргумента для agrep было истинным. Я думал, что Agrep воспримет это как регулярное выражение и обработает две строки как совпадения без разницы. - person BeerSharkBot; 10.12.2019
comment
да, вы также можете использовать agrep("CPA'?s?", c("CPA's"), fixed = FALSE), и в этом случае оно будет рассматриваться как регулярное выражение. - person Ronak Shah; 10.12.2019