Разделить строки при первом двоеточии
Я читаю файлы данных в текстовом формате, используя readLines
. Первый столбец-это сложный текст, который мне не нужен. Следующие столбцы содержат данные, которые мне нужны. Первый "столбец" и данные разделяются двоеточием (:). Я хочу разделить каждую строку на первую двоеточие и удалить полученную текстовую строку, сохранив только данные.
Ниже приведен пример файла данных. Одним из потенциальных осложнений является то, что одна строка данных содержит несколько двоеточий. Эта линия может в некоторых точка стала моим заголовком. Поэтому я, вероятно, не должен разделяться на каждую толстую кишку, только на первую толстую кишку.
my.data <- "first string of text..: aa : bb : cc
next string ........ : 2 0 2
third string......1990: 7 6 5
last string : 4 2 3"
my.data2 <- readLines(textConnection(my.data))
my.data2
я попробовал код, представленный здесь:
разделить на первую запятую в строке
и здесь:
R: удаление последних трех точек из строки
код по первой ссылке выше, кажется, разделяется только при первом двоеточии первой строки. Код по второй ссылке, вероятно, сделает то, что я хочу, но есть слишком сложно для меня, чтобы успешно модифицировать его до сих пор.
вот данные, которые я надеюсь получить, и в этот момент я могу просто заменить оставшиеся двоеточия в первой строке пустыми пробелами, используя очень простой gsub
о себе:
aa : bb : cc
2 0 2
7 6 5
4 2 3
Извините, если это дубликат сообщения, которое я не нашел, и спасибо за любые советы или помощь.
1 ответов
следующее начнется в начале строки, а затем схватит все до и включая первое двоеточие и любые дополнительные пробелы и заменит это ничем (по существу, просто удалив его)
gsub("^[^:]+:\s*", "", my.data2)
если вы не хотите удалять пробелы, вы можете сделать
gsub("^[^:]+:", "", my.data2)
для некоторого разъяснения того, что делает исходное регулярное выражение. Начиная с самого начала:
^
это говорит только найти спички в начало строки
[^:]
это представляет любой символ, который не является двоеточием
+
это говорит, чтобы соответствовать предыдущему символу один или несколько раз (так соответствуют как можно больше символов без двоеточия)
:
это то, что на самом деле соответствует двоеточию
\s
это соответствует пробел
*
это говорит, чтобы соответствовать предыдущему символу ноль или более раз (поэтому мы удаляем любое дополнительное пространство после толстой кишки)
Итак, собирая все это вместе, мы начинаем в начале строки, а затем сопоставляем как можно больше символов без двоеточия, а затем захватываем первый символ двоеточия и любые дополнительные пробелы и заменяем все это ничем (по существу, удаляя весь мусор, который мы не хотим).