How to delete and change string in cell array?

2 views (last 30 days)
Hi, I have a cell array with every cell containing a string for every day such as: 1313406900.Mon.Aug.15_11_15_00.GMT.2011.nordzee1.cx.plan.bar
I want to change the strings on my cell array so it only give me the date, as Aug-15-2011 on the example. How can I delete the part of the string I'm not interested in?
Thanks in advance, Sara

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 6 Jun 2016
Edited: Azzi Abdelmalek on 6 Jun 2016
s={'1313406900.Mon.Aug.15_11_15_00.GMT.2011.nordzee1.cx.plan.bar';'1313406900.Mon.Jun.17_12_15_00.GMT.2011.nordzee1.cx.plan.bar'}
out=datestr(regexpi(s,'(?<=[a-z]+\.)([a-z]+\.\d+_\d+)','match','once'),'dd-mmm-yyyy')

Guillaume
Guillaume on 6 Jun 2016
On the assumption that the first _ is always between the day and the year, and that the year is always 20xx, and that the month is always before a dot immediately before the day:
regexprep(yourcellarray, '.*?([^.]+)\.(\d+)_(\d+).*', '$1-$2-20$3')
will work. The regular expression has five parts:
  • .*? is intended to match everything before the month. It matches any number of characters but as few as possible so that the rest of the expression still matches
  • ([^.]+)\. is intended to capture the month. It matches the longest sequence of non-dot characters followed by a dot. The sequence of non-dot character is token number 1
  • (\d+)_ is intended to capture the day. It matches as many digits as possible followed by a _. The digit sequence is token number 2
  • (\d+) is intended to capture the year. It matches as many digits as possible. This is token number 3
  • .* matches the remainder of the string
Tokens 1,2 and 3 are simply strung together with a - in between and a 20 before token 3. The rest of the match is discarded.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!