почему это регулярное выражение возвращает false? - PullRequest
0 голосов
/ 08 октября 2019

Насколько я понимаю, оба приведенных ниже оператора grepl regex должны искать заданное числовое значение для 4 цифр от 0 до 9.

Я пытаюсь понять, почему возвращается первый grepl. ИСТИНА, а вторая возвращает ЛОЖЬ. Единственная разница между числовыми числами состоит в том, что я добавил дополнительный ноль ко второму числовому значению. Я думал, что они оба вернут ИСТИНУ.

grepl("\\d{4}", 999900000)

grepl("\\d{4}", 9999000000)

1 Ответ

3 голосов
/ 08 октября 2019

Что происходит со следующими двумя вызовами grepl, так это то, что R выполняет неявное приведение ваших числовых входных данных к символу, используя as.character. Итак, следующие два вызова идентичны этому:

grepl("\\d{4}", as.character(999900000))
grepl("\\d{4}", as.character(9999000000))

, который становится:

grepl("\\d{4}", "999900000")
grepl("\\d{4}", "9.999e+09")

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

grepl("\\d{4}", "999900000")
[1] TRUE
grepl("\\d{4}", "9999000000")
[1] TRUE
...