Как можно обрезать пробелы внутри скобок?R: Обрезать пробелы в скобках
x <- c("the li7(li7, p)b13 reaction")
В данном конкретном случае, он должен только удалить пробелы между запятой и р, но я ищу для общего решения.
Как можно обрезать пробелы внутри скобок?R: Обрезать пробелы в скобках
x <- c("the li7(li7, p)b13 reaction")
В данном конкретном случае, он должен только удалить пробелы между запятой и р, но я ищу для общего решения.
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)"
Регулярное выражение работает следующим образом: когда он находит пробел, он смотрит вперед на правильную круглую скобку. Если он найдет какие-либо другие круглые скобки на своем пути, он останавливается и движется дальше, пока не найдет пробел, в котором нет. Он заменяет пустую строку.
Ницца, не могли бы вы сломать это регулярное выражение? И можно ли это сделать с помощью R-образа регулярного выражения, и вы просто больше привыкли к perl, или это невозможно без использования perl-подобного regexp? – LAP
Ну, вам нужны взгляды, которые идут с perl. –
Кажется, мне нужно изучить perl regexpr. Благодарю. – LAP
Хорошо, я нашел решение, используя str_extract()
в stringr
-пакете.
gsub("\\(+.*[[:blank:]]+.*\\)+",
gsub("[[:blank:]]", "",
str_extract(x, "\\(+.*[[:blank:]]+.*\\)+")),x)
Это использует gsub()
для поиска по шаблону строки с пробелами в скобках, а затем использует другой GSUB, чтобы заменить его извлеченную часть без пробелов.
Редактировать: Если ваш шаблон в скобках состоит из чего-то, что не покрывается [[:graph:]]
-семейством, вам может потребоваться изменить эту часть выражения.
Редактирование: переключилось на [[:graph:]]
на .
, так что теперь это должно работать практически во всем.
Большое спасибо! Я должен указать проблему: возможны несколько скобок внутри строки. Подобно 'x <- c (" c13 (d, a) b11 и c13 (d, t) c12 реакции ")' К сожалению, в этом случае ваш трюк для извлечения и замены не работает. Мы снова в начале. – hyco
Используйте 'gsub' с соответствующим регулярным выражением. – Roland
... пытался ... – hyco
Если это только одно приложение, попробуйте 'x <- gsub (", p ",", p ", x, fixed = TRUE)' – LAP