Регулярное выражение R обрезает пробел строки - PullRequest
1 голос
/ 19 июня 2020

У меня есть строка, загруженная из Интернета:

x = "the company 's newly launched cryptocurrency , Libra , hasn 't been contacted by Facebook , according to a report ." 

Они проанализировали строку так, что: ... Кроме того, сокращенные слова, такие как (не могу), разделены на две части (ок. n't), а знаки препинания отделяются от слов (на уровне глаз. Как она).

Я хочу вернуть строку в нормальное состояние, например:

x = "the company's newly launched cryptocurrency, Libra, hasn't been contacted by Facebook, according to a report."

Как обрезать пробел перед пунктуацией?

Есть хотя бы об использовании str_remove_all с регулярным выражением:

str_remove_all(x,"\\s[[:punct:]]'") 

, но он также удалит знаки препинания.

Есть идеи?

Ответы [ 2 ]

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

С обратной ссылкой:

x <- "the company 's newly launched cryptocurrency , Libra , hasn 't been contacted by Facebook , according to a report ."

gsub("(\\s+)([[:punct:]])", "\\2", x, perl = TRUE)

# [1] "the company's newly launched cryptocurrency, Libra, hasn't been contacted by Facebook, according to a report."
2 голосов
/ 19 июня 2020

Вы можете использовать

str_remove_all(x,"\\s+(?=[[:punct:]])")
str_remove_all(x,"\\s+(?=[\\p{S}\\p{P}])")

или базовый R:

gsub("\\s+(?=[\\p{S}\\p{P}])", "", x, perl=TRUE) 

См. демонстрацию регулярных выражений .

Подробнее

  • \s+ - 1 или более символов пробела
  • (?=[[:punct:]]) - положительный просмотр вперед, который соответствует местоположению, за которым сразу же следует символ пунктуации.

Пожалуйста, проверьте R / regex с stringi / ICU: почему '+' считается символом, отличным от - [: punct:]? , прежде чем выбирать вариант с [[:punct:]].

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