Разделить строки при первом двоеточии

Я читаю файлы данных в текстовом формате, используя 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 это соответствует пробел

* это говорит, чтобы соответствовать предыдущему символу ноль или более раз (поэтому мы удаляем любое дополнительное пространство после толстой кишки)

Итак, собирая все это вместе, мы начинаем в начале строки, а затем сопоставляем как можно больше символов без двоеточия, а затем захватываем первый символ двоеточия и любые дополнительные пробелы и заменяем все это ничем (по существу, удаляя весь мусор, который мы не хотим).