Удалить слова, в которых первый символ буква, а остальные цифры

Я хотел бы удалить все слова из строки, которая начинается с буквы, за которой следуют цифры и заканчиваются точкой с запятой или пробелом. Например, учитывая строку

x <- "Z1; D49;  Pay-What-You-Want; A1; Moods; Weather; Social norms, K20"

Желаемый результат

Pay-What-You-Want; Moods; Weather; Social norms;

Спасибо

Ваши данные на самом деле представляют собой одну длинную строку или вектор строк?

jpsmith 11.01.2023 01:03

В вашем примере после данных «Социальные нормы» стоит запятая, ее следует заменить точкой с запятой или это просто опечатка?

neilfws 11.01.2023 01:04

Нет, это не опечатка. В идеале он должен содержать точку с запятой, но самое главное — избавиться от слов с одной буквой и цифрами. Данные представляют собой вектор строк, но я могу справиться с этой проблемой.

sotnik 11.01.2023 01:23

Вы удалили K20, но он не заканчивается точкой с запятой или пробелом

langtang 11.01.2023 01:32
gsub("([ ]+)?[A-Za-z]\\d+([; ]+)?","",x)
langtang 11.01.2023 01:42
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
1
5
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Итак, давайте сделаем это «вектором или строкой», потому что с таким значением легче работать, чем с односимвольным значением.

# if commas should become semicolons then use gsub("
x <- gsub("[,]", ";", "Z1; D49;  Pay-What-You-Want; A1; Moods; Weather; Social norms, K20")
# make it a vector
x2 <- trimws(scan(text=x, what = "", sep = ";"))
#If you want it to be one string (which seems odd but doable:
(x3 <- paste( x2[!grepl("^[[:alpha:]](\\d)+",x2)] , collapse = "; ") )
#[1] "Pay-What-You-Want; Moods; Weather; Social norms"
# Or
(x4 <- x2[!grepl("^[[:alpha:]](\\d)+",x2)] )
#[1] "Pay-What-You-Want" "Moods"             "Weather"           "Social norms"  

Насколько я понимаю ваши комментарии, у вас есть вектор символов, каждый элемент которого представляет собой строку, разделенную точкой с запятой (с некоторыми запятыми). Если это так, то с помощью функций stringr внутри sapply():

library(stringr)

sapply(
  str_split(x, "(,|;)\\s+"),
  \(.x) str_c(.x[!str_detect(.x, "^\\w\\d+$")], collapse = "; ")
)
# [1] "Pay-What-You-Want; Moods; Weather; Social norms"

Или используя базу R:

sapply(
  strsplit(x, "(,|;)\\s+"),
  \(.x) paste(.x[!grepl("^\\w\\d+$", .x)], collapse = "; ")
)

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

x <- "Z1; D49;  Pay-What-You-Want; A1; Moods; Weather; Social norms, K20"

gsub("\\b[a-zA-Z]\\d+[ ;]*", "", gsub(",", ";", x))
#[1] "Pay-What-You-Want; Moods; Weather; Social norms; "

gsub("\\b[a-zA-Z]\\d+[ ;]", "", x)  #Does what the question asked for
#[1] "   Pay-What-You-Want;  Moods; Weather; Social norms, K20"

\\b..Граница слова [a-zA-Z]..начинается с буквы \\d+..по номерам [ ;]..оканчивающийся точкой с запятой или пробелом

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