IDL STRMATCH и STRSPLIT с несколькими строками

Я пытаюсь вырезать некоторые строки, содержащие символ '_', используя STRMATCH и STRSPLIT, чтобы изменить их следующим образом:

mystring=['aaa_111','bbb_222','ccc','ddd']
nmax=N_ELEMENTS(mystring)
cut_mystring=STRARR(2,nmax)

FOR i=0, nmax-1 DO BEGIN
  IF (STRMATCH(mystring[i], '*_*') eq 1) THEN BEGIN
    cut_mystring[i]=STRSPLIT(mystring[i], '_', /EXTRACT)
    mystring_new[i]= cut_mystring[0,i]+'_MYCOMMENT_'+cut_mystring[1,i]
  ENDIF
ENDFOR
print, mystring_new[i]

Результат печати mystring_new[i]:

aaa_111
222_MYCOMMENT_
ccc
ddd

Итак, для первого элемента вроде работает (и, конечно, для двух последних тоже), но не для второго.

Что я здесь делаю неправильно? Спасибо!


person Alberto    schedule 14.07.2014    source источник
comment
[РЕШЕНО]Решение: cut_mystring=STRSPLIT(mystring[i], '', /EXTRACT) mystring_new[i]=cut_mystring[0]+'_MYCOMMENT'+cut_mystring[1]   -  person Alberto    schedule 15.07.2014


Ответы (1)


Возможно, было бы проще использовать регулярное выражение?

mystring = ['aaa_111','bbb_222','ccc','ddd']
r = stregex(mystring, '([^_]*)(.*)?', /extract, /subexpr)
mystring_new = reform(r[1, *] + '_MYCOMMENT' + r[2, *])

Что выводит:

IDL> for i = 0, 3 do print, mystring_new[i]
aaa_MYCOMMENT_111
bbb_MYCOMMENT_222
ccc_MYCOMMENT
ddd_MYCOMMENT

Регулярное выражение ([^_]*)(.*). ([^_]*) соответствует диапазону символов кроме подчеркивания в одну группу. (.*) сопоставляет все остальное в строке, включая символы подчеркивания, во вторую группу.

person Pi Marillion    schedule 09.12.2014