Подавление нежелательных пробелов в датах - PullRequest
0 голосов
/ 18 октября 2019

При чтении кода из другого места у меня есть матрица дат под названием «время», в которой есть нежелательные пробелы, которые я хочу удалить.

Я пробовал isspace и regexprep без удачи

time = regexprep(time, '\W', '');

У меня около 130000 дат в следующем формате:

04-July  -2017 09:54:30.000
04-July  -2017 09:54:31.000

и т. Д. Между концом «июля» и следующей чертой есть два пробела, которые я хочу подавить:

04-July-2017 09:54:30.000
04-July-2017 09:54:31.000

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Заменить два или более пробела ничем:

>> time = {'04-July  -2017 09:54:30.000'
'04-July  -2017 09:54:31.000'}
>> regexprep(time,' {2,}','')

{'04-July-2017 09:54:30.000'}
{'04-July-2017 09:54:31.000'}
0 голосов
/ 18 октября 2019

Если вы просто не хотите исправить свой входной файл для последующего использования, вам не обязательно исправлять ввод. Существует несколько способов непосредственного анализа времени с помощью лишних пробелов:

Позвольте time быть:

time = ['04-July  -2017 09:54:31.000';
        '04-July  -2017 09:54:32.000']

Затем непосредственно проанализировать строковое представление даты и времени в серийный номер MATLAB. число, которое вы можете использовать:

%% get date in [MATLAB date serial number]
formatIn  = 'dd-mmm  -yyyy HH:MM:SS.FFF' ;
matlabTime = datenum(time,formatIn)

matlabTime =
          736880.412858796
           736880.41287037

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

Если вашцель состоит в том, чтобы просто исправить строку, затем вы можете использовать тот же трюк для считывания значения и точно определить, какой выходной формат вы хотите получить:

%% get date in [string]
formatIn  = 'dd-mmm  -yyyy HH:MM:SS.FFF' ;
formatOut = 'dd-mmm-yyyy HH:MM:SS.FFF' ;

stringTime = datestr(datenum(time,formatIn),formatOut)

stringTime =
04-Jul-2017 09:54:31.000
04-Jul-2017 09:54:32.000

Если вы хотите использовать новыйdatetime объектов, формат ввода имеет немного другой синтаксис, но операция примерно такая же:

%% get date in [datetime] objects
formatIn  = 'dd-MMM  -yyyy HH:mm:ss.SSS' ;
t = datetime(time,'InputFormat',formatIn)

t = 
   04-Jul-2017 09:54:31
   04-Jul-2017 09:54:32

Хотя консоль MATLAB отображает t в удобочитаемом формате, t теперь datetime объект. Проверьте документацию, если хотите использовать это.

0 голосов
/ 18 октября 2019

Заменить только два пробела после месяца и до тире (-):

>> date = '04-July  -2017 09:54:30.000';
>> regexprep(date, '(\w)  -', '$1-')
ans =
    '04-July-2017 09:54:30.000'
...