Извлекать слова между числами - PullRequest
0 голосов
/ 17 января 2019

Попытка написать несколько regex в R, чтобы извлечь несколько слов между числами для каждой строки в символьном векторе R. К сожалению, мои regex навыки не совсем соответствуют задаче.
Вот примерэтой проблемы и моей первоначальной попытки:

x <- c("1 Singleword 1,234 342", "2 randword & thirdword 1,545 323", 
      "3 Anotherword wordagain Newword. 3,234 556")

m <- regexpr("[a-zA-Z]+\\s+", x, perl = TRUE)

regmatches(x, m)

Этот подход дает только

"Singleword ", "randword ", "Anotherword "

Что мне нужно, это

"Singleword", "randword & thirdword", "Anotherword wordagain Neword."

Я считаю, что это нужно будеткакой-то шаблон regex, который начинается с символа (как у меня сейчас), а затем тянет все, пока не будет достигнуто число.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Использование sub

> sub(".\\s(\\D+).*", "\\1", x)
[1] "Singleword "   "randword & thirdword "  "Anotherword wordagain Newword. "

Использование str_extract

> library(stringr)
> str_extract(x, pattern = "\\D+")
[1] " Singleword "  " randword & thirdword "  " Anotherword wordagain Newword. "
0 голосов
/ 17 января 2019

образец данных

x <- c("1 Singleword 1,234 342", "2 randword & thirdword 1,545 323", 
   "3 Anotherword wordagain Newword. 3,234 556")

База R

#replace als numbers and comma's with `""` (=nothing), 
# also, trim whitespaces (thanks Markus!)
trimws( gsub( "[0-9,]", "", x ) )

[1] «Одно слово», «случайное слово и третье слово», «другое слово», «новое слово».

stringR

library(stringr)
str_extract(x, pattern = "(?<=\\d )[^0-9]+(?= \\d)")

[1] «Одно слово», «Случайное слово и третье слово», «Другое слово, снова и снова».

Если вы хотите больше узнать о (работе) регулярных выражений в приведенном выше коде (и в других ответах), ознакомьтесь с их магией (и пояснениями) по адресу: https://regex101.com/

объяснение последнего регулярного выражения: https://regex101.com/r/QgERuZ/2

0 голосов
/ 17 января 2019
x <- c("1 Singleword 1,234 342", "2 randword & thirdword 1,545 323", 
       "3 Anotherword wordagain Newword. 3,234 556")

m <- regexpr("[a-zA-Z].(\\D)+", x, perl = TRUE)

regmatches(x, m)

[1] "Одно слово", "случайное слово и третье слово"
[3] «Другое слово» снова «Новое слово».

Я использовал https://regexr.com/, и это шпаргалка, чтобы понять, как составить регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...