grepl на период. в Р?

Допустим, у меня есть строка «Привет». Я хочу посмотреть, содержит ли эта строка точку:

text <- "Hello."
results <- grepl(".", text)

Это возвращает результаты как ИСТИНА, но также вернет это, если текст "Hello" без точки.

Я в замешательстве, я ничего не могу найти об этом в документации, и это делается только на время.

Любые идеи?


person marc    schedule 24.10.2013    source источник
comment
"." — это любой символ. Что угодно. Вы имели в виду "\\.".   -  person Simon O'Hanlon    schedule 24.10.2013
comment
Наоборот! В документации тратится огромное количество времени на описание того, как grepl использует регулярные выражения, в которых . является специальным символом. В документации есть даже ссылки на разделы, посвященные регулярным выражениям, и много обсуждений того, как установка fixed = TRUE будет выполнять точное сопоставление без использования регулярных выражений.   -  person joran    schedule 24.10.2013
comment
Точно. @joran, мне нужно просмотреть его, потому что я не вижу его в тексте «Сопоставление шаблона и замена».   -  person marc    schedule 24.10.2013
comment
@marc под самым первым аргументом pattern пишет character string containing a regular expression, где регулярное выражение — это ссылка на страницу с регулярными выражениями, где эта информация разумно содержится! :-)   -  person Simon O'Hanlon    schedule 24.10.2013
comment
@SimonO101: огромная помощь! Спасибо.   -  person marc    schedule 24.10.2013
comment
В защиту Марка: меня тоже однажды смутило то, что ?regexpr сам по себе не документирует правила сопоставления регулярных выражений, и что на самом деле нужно ?regex   -  person Josh O'Brien    schedule 24.10.2013


Ответы (2)


См. различия с этими примерами

 > grepl("\\.", "Hello.")
[1] TRUE
> grepl("\\.", "Hello")
[1] FALSE

. означает все, что указано SimonO101, если вы хотите найти явное ., вам нужно пропустить его, используя \\., что означает поиск .

Документация R обширна по регулярным выражениям, вы также можете просмотреть эту ссылку, чтобы понять, как использовать точку .

person Jilber Urbina    schedule 24.10.2013
comment
Влияет ли ´\\´ на последующий символ (в данном случае на точку) или есть способ сделать так, чтобы он охватывал ряд последующих символов? Допустим, я не хочу писать «\\.\\.\\.´ вместо «...». Могу ли я сделать «\(.)» или что-то в этом роде? - person Fabian Habersack; 14.08.2019
comment
@Fabian Habersack Чтобы захватить одну или несколько точек (.), вы должны использовать квантификатор +, поэтому вы можете написать \\.+ - person Jilber Urbina; 14.08.2019
comment
Хорошо, но что, если мне нужно сопоставить либо определенное количество точек, скажем, равное 10, либо что, если я хочу сопоставить точку в 10+ раз? Могу ли я сделать \\.{10} ? Кроме того, как мне сопоставить 10 или более? - person Fabian Habersack; 15.08.2019
comment
@FabianHabersack, вы можете прочитать некоторые основные правила регулярных выражений здесь - person Jilber Urbina; 15.08.2019
comment
Почему \\. не обычный побег \. ? - person jessexknight; 13.02.2020
comment
для 3 последовательных точек ... мы используем \\.\\.\\. иначе это будет путать с точками, перемежающимися с другими символами. - person ambrish dhaka; 30.09.2020

Обычно я использую подход Джилбера, но есть два других способа:

> grepl("[.]", "Hello.")
[1] TRUE
> grepl("[.]", "Hello")
[1] FALSE

> grepl(".", "Hello.", fixed = TRUE)
[1] TRUE
> grepl(".", "Hello", fixed = TRUE)
[1] FALSE
person Tyler Rinker    schedule 24.10.2013