конкретный шаблон и позиция gsub в символьной строке

1

Это, вероятно, довольно простое исправление, но я не так хорошо разбираюсь в RegExpr, как было бы идеально, поэтому помощь приветствуется. Я искал в другом месте, и у меня ничего не работает.

Я пытаюсь стандартизировать некоторые названия университетских степеней. Мне нужен такой формат:

Код ученой степени - Основное имя EG - «BA - Computer Stuff»

IE слово, одиночный пробел, тире, одиночный пробел, слово.

Он не распознает несколько пробелов на одной или обеих сторонах тире, и если он не видит пробелов, он заменяет буквы по обе стороны тире строчными буквами s, где я думал, что это \ s или \ s пробел, и это будет заменять.

Этот один бит исправления формата является частью более крупного оператора mutate, IE одна строка с скобками, как пример в другом месте, для меня не сработает.

У меня есть пример данных:

data <- data.frame( var = c("BA-English" , "BA - English" , "BA -  Chemistry" , "BS  -  Rubber Chickens") )

    var %>%
      mutate(var = gsub("\\w\\S-\\S\\w", "\\w\\s-\\s\\w", var) ) -> var_fix )

Любая помощь очень ценится. Спасибо

  • 0
    Попробуйте gsub("\\s*-\\s*", " - ", var) или gsub("\\b\\s*-\\s*\\b", " - ", var)
  • 0
    Да, отлично работает, спасибо, что разместили это в качестве ответа ниже, и, что более важно, добавили описание того, что делает каждая часть RegExpr и почему она включена. Спасибо!
Теги:
gsub
CodeFix

1 ответ

1
Лучший ответ

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

gsub("\\s*-\\s*", " - ", var)
## Or, if the hyphen is in between word chars
gsub("\\b\\s*-\\s*\\b", " - ", var)

См. Демонстрацию регулярного выражения №1 и демонстрацию регулярного выражения №2 .

Детали :

  • \b - граница слова
  • \s* - ноль или более пробелов
  • - - дефис

Примечание : если вы хотите нормализовать дефисы, вы также можете рассмотреть возможность использованияgsub("(*UCP)\\s*[\\p{Pd}\\x{00AD}\\x{2212}]\\s*", " - ", var, perl=TRUE) /gsub("(*UCP)\\b\\s*[\\p{Pd}\\x{00AD}\\x{2212}]\\s*\\b", " - ", var, perl=TRUE) , куда(*UCP) делает границы слова и пробелы с учетом Unicode,\p{Pd} соответствует любому тире Unicode,\x{00AD} соответствует мягкому дефису и\x{2212} соответствует символу минус.

Поделиться
Источник
  • 1
    1) - это работает! 2) - вы добавили контекст для каждой части RegExpr, что очень полезно! СПАСИБО !!!!!!

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум