Azzera filtri
Azzera filtri

How to delete and change string in cell array?

2 visualizzazioni (ultimi 30 giorni)
Sara Antonio
Sara Antonio il 6 Giu 2016
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

Risposte (2)

Azzi Abdelmalek
Azzi Abdelmalek il 6 Giu 2016
Modificato: Azzi Abdelmalek il 6 Giu 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 il 6 Giu 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!

Translated by