Я работаю с вектором символов следующего формата:
[-0.2122,-0.1213)
[-0.2750,-0.2122)
[-0.1213,-0.0222)
[-0.1213,-0.0222)
Я хотел бы удалить [
и )
, чтобы получить желаемый результат, похожий на:
-0.2122,-0.1213
-0.2750,-0.2122
-0.1213,-0.0222
-0.1213,-0.0222
Попытки
1 - Группы,
Я думал о захвате первой и второй группы в строках синтаксиса:
[[^\[{1}(?![[:digit:]])\){1}
но, похоже, это не работает (regex101).
2 - Пунктуация
Код: [[:punct:]]
захватит все знаки препинания regex101.
3 - Снова группы
Затем я попытался сопоставить две группы: (\[)(\))
, но опять же без недостатка regex101.
Проблему можно легко решить, дважды применив gsub
или используя multigsub
доступен в пакете qdap
, но мне интересно решить это с помощью одного выражения, это возможно.
\[|\)
? как вgsub("\\[|\\)", "", "[-0.2122,-0.1213)")
? Или я что-то пропустил здесь - person David Arenburg   schedule 20.01.2016^\[|\)$
или^[[:punct:]]|[[:punct:]]$
? - person Avinash Raj   schedule 20.01.2016v
:gsub("^.|.$", "", v)
. Также кажется, что они имеют фиксированную ширину, так что это сработает:read.fwf(textConnection(v), widths = c(1, 7, 1, 7, 1))[c(2, 4)]
- person G. Grothendieck   schedule 20.01.2016gsub("[[)]","","[-0.2122,-0.1213)")
, так как мы можем быть уверены, что в обработанном тексте не будет круглых или квадратных скобок из первого и последнего. - person Tensibai   schedule 20.01.2016substr(x, 2, nchar(x) - 1)
- person zx8754   schedule 20.01.2016nchar
в этом конкретном случае то же самое, но я бы предпочел иметь решение, которое не обязательно зависит от этого, поскольку в некоторых других случаях оно может быть другим. - person Konrad   schedule 20.01.2016regmatches(input(regexpr('\\[(.*),(.*)\\)',input)
звучит лучше (возможно, с префиксом as.numeric... демонстрация того, что я имею в виду - person Tensibai   schedule 20.01.2016