r - просто разделить, если перед разделителем нет пробела - PullRequest
0 голосов
/ 19 июня 2020

знает ли кто-нибудь способ разбить строку, используя определенную строку, но только если до этого нет места? Может даже с помощью функции strsplit? Вот пример:

input_str = "For example. Production of something a Product.ProIts cool"

Я хочу разделить строку, используя «Pro» в «.ProIts cool», но не другой «Pro» в Production или Product. Ни в коем случае нет точки перед Pro, но всегда должен быть пробел, если кто-то написал что-то с помощью «Pro ...». У меня тоже разные разделители. Вот мой текущий код, который отлично работает, если в тексте нет повторяющегося разделителя:

arr_seperators = c("String1", "Pro" , "Contra")
n = 3
output = rep(0,n)
for ( i in 1:n){
  output[i] =  strsplit(input_str, arr_seperators[i])[[1]][2]
  for (j in 1:n){
  output[i] =  strsplit(output[i], arr_seperators[j])[[1]][1] 
  }

}
print(output)

Ответы [ 2 ]

2 голосов
/ 19 июня 2020
strsplit("For example. Production of something a Product.ProIts cool", 
         "(?<!\\s)Pro", perl = TRUE)
# [[1]]
# [1] "For example. Production of something a Product." "Its cool"                                       

(?<!\\s) использует поиск по регулярному выражению , поддерживается при использовании perl -совместимых регулярных выражений (perl=TRUE).

(?<=...) - положительный смотреть назад ; (?<!...) означает отрицательный просмотр назад , иначе без ; а \\s - это «пробел». Предпосылка поиска в целом состоит в том, чтобы соответствовать, когда есть что-то до / после вашего шаблона, но не использовать этот предыдущий / следующий текст в захваченной подстроке.

Мы также можем использовать положительный просмотр назад с (?<=\\S) для не -пробел.

0 голосов
/ 19 июня 2020

Может, вы ищете что-то подобное? Если нет, добавьте желаемый результат ..

#split after the delimiter and keep it
base::strsplit( "For example. Production of something a Product.ProIts cool",
                      split = "(?<=.)(?=\\.Pro)",
                      perl = TRUE )

[[1]]
[1] "For example. Production of something a Product" ".ProIts cool" 
...