Выделяет специальный символ в R regex?
Несмотря на чтение страницы справки R regex
Наконец, чтобы включить литерал -, поместите его первым или последним (или, для perl = Только ИСТИНА, перед ним обратная косая черта).
Я не понимаю разницы между
grepl(pattern=paste("^thing1\\-",sep=""),x="thing1-thing2")
и
grepl(pattern=paste("^thing1-",sep=""),x="thing1-thing2")
Оба возвращают TRUE. Должен ли я убежать или нет? Какова наилучшая практика?
Ответы
Ответ 1
Дефис в основном является нормальным символом в регулярных выражениях.
Вам не нужно скрывать дефис вне класса персонажа; он не имеет особого значения.
В классе символов [ ]
вы можете поместить дефис в качестве символа первый или последний в диапазоне. Если вы поместите дефис где-нибудь еще, вам нужно его избежать, чтобы добавить его в свой класс.
Примеры:
grepl('^thing1-', x='thing1-thing2')
[1] TRUE
grepl('[-a-z]+', 'foo-bar')
[1] TRUE
grepl('[a-z-]+', 'foo-bar')
[1] TRUE
grepl('[a-z\\-\\d]+', 'foo-bar')
[1] TRUE
Примечание.. Более типично найти дефис, помещенный первым или последним в класс символов.
Ответ 2
Чтобы узнать, что означает -
иметь особый смысл внутри класса символов (и как его поместить последним, дает ему его буквальное значение), попробуйте следующее:
grepl("[w-y]", "x")
# [1] TRUE
grepl("[w-y]", "-")
# [1] FALSE
grepl("[wy-]", "-")
# [1] TRUE
grepl("[wy-]", "x")
# [1] FALSE
Ответ 3
Они оба соответствуют одному и тому же тексту в этих экземплярах. То есть:.
x <- "thing1-thing2"
regmatches(x,regexpr("^thing1\\-",x))
#[1] "thing1-"
regmatches(x,regexpr("^thing1-",x))
#[1] "thing1-"
Использование -
является специальным символом в определенных ситуациях, хотя для указания диапазонов значений, таких как символы между a
и z
, если указано внутри []
, например:
regmatches(x,regexpr("[a-z]+",x))
#[1] "thing"