2016-11-14 11 views
-2

Как можно обрезать пробелы внутри скобок?R: Обрезать пробелы в скобках

x <- c("the li7(li7, p)b13 reaction") 

В данном конкретном случае, он должен только удалить пробелы между запятой и р, но я ищу для общего решения.

+0

Используйте 'gsub' с соответствующим регулярным выражением. – Roland

+0

... пытался ... – hyco

+0

Если это только одно приложение, попробуйте 'x <- gsub (", p ",", p ", x, fixed = TRUE)' – LAP

ответ

2
cases <-c(
    "(a,b)", 
    "(a, b)", 
    "(a, b)", 
    "a(a, b)", 
    "a (a, b)", 
    "a (a, b) a(a,b) a(a,b)" 
) 

gsub("[[:space:]](?=[^()]*\\))", "", cases, perl = TRUE) 
[1] "(a,b)"     "(a,b)"     "(a,b)"     
[4] "a(a,b)"    "a (a,b)"    "a (a,b) a(a,b) a(a,b)" 

Регулярное выражение работает следующим образом: когда он находит пробел, он смотрит вперед на правильную круглую скобку. Если он найдет какие-либо другие круглые скобки на своем пути, он останавливается и движется дальше, пока не найдет пробел, в котором нет. Он заменяет пустую строку.

+0

Ницца, не могли бы вы сломать это регулярное выражение? И можно ли это сделать с помощью R-образа регулярного выражения, и вы просто больше привыкли к perl, или это невозможно без использования perl-подобного regexp? – LAP

+1

Ну, вам нужны взгляды, которые идут с perl. –

+0

Кажется, мне нужно изучить perl regexpr. Благодарю. – LAP

1

Хорошо, я нашел решение, используя str_extract() в stringr -пакете.

gsub("\\(+.*[[:blank:]]+.*\\)+", 
gsub("[[:blank:]]", "", 
    str_extract(x, "\\(+.*[[:blank:]]+.*\\)+")),x) 

Это использует gsub() для поиска по шаблону строки с пробелами в скобках, а затем использует другой GSUB, чтобы заменить его извлеченную часть без пробелов.

Редактировать: Если ваш шаблон в скобках состоит из чего-то, что не покрывается [[:graph:]] -семейством, вам может потребоваться изменить эту часть выражения.

Редактирование: переключилось на [[:graph:]] на ., так что теперь это должно работать практически во всем.

+0

Большое спасибо! Я должен указать проблему: возможны несколько скобок внутри строки. Подобно 'x <- c (" c13 (d, a) b11 и c13 (d, t) c12 реакции ")' К сожалению, в этом случае ваш трюк для извлечения и замены не работает. Мы снова в начале. – hyco