Я работаю с вектором ниже:
vec <- c("http://statistics.gov.scot/id/statistical-geography/S02000002",
"http://statistics.gov.scot/id/statistical-geography/S02000003")
Я хотел бы удалить http://statistics.gov.scot/id/statistical-geography/
из вектора. Мой текущий синтаксис regex
:
vec_cln <- gsub(replacement = "", x = vec, perl = TRUE, fixed = FALSE,
pattern = "([[:alnum:]]|[[:punct:]]|)(?<!S\\d{8})")
Но это оставляет только последнюю цифру из вектора vec
. Я предполагаю, что проблема с \\d{8}
, однако мне не ясно, как это обойти. Я пробовал различные решения для regex101, но безрезультатно. Некоторые примеры:
(?<!S\d)
- остается вторая цифра(?<!S[[:digit:]])
- то же
То, чего я пытаюсь добиться, можно просто резюмировать: * сопоставляйте все, пока не найдете заглавную букву S и 8 цифр после нее.
Заметки
Я хочу прийти к решению через gsub
и regex
, которые я не хочу использовать:
gsubfn
и прототипы объектов- Я не заинтересован в использовании
substr
, так как мне, возможно, придется работать со строками переменной длины.
([[:alnum:]]|[[:punct:]]|)
также ничего не будет соответствовать. - person   schedule 27.11.2015.*(?=S\\d{8})
Это регулярное выражение будет делать, сопоставлять и гарантировать, что за ним следует S, за которой следуют 8 цифр (положительный просмотр) Demo - person Tensibai   schedule 27.11.2015sub(".*(S\\d{8})", "\\1", vec)
? Или действительно все до первых S+8 цифр:sub("^(.*?)S\\d{8}.*", "\\1", vec, perl=T)
? (ОБНОВЛЕНО) - person Wiktor Stribiżew   schedule 27.11.2015(.*?)(?=S\d{8}).*
и замените на$1
- person   schedule 27.11.2015grep
, если вы хотите удалить какие-то определенные строки из вектора? - person Wiktor Stribiżew   schedule 27.11.2015