具有多个字符串的IDL STRMATCH和STRSPLIT

时间:2014-07-14 18:36:37

标签: string string-split idl-programming-language

我正在尝试使用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]

print的结果,mystring_new [i]是:

aaa_111
222_MYCOMMENT_
ccc
ddd

所以,它似乎适用于第一个元素(当然也适用于后两个元素),但不适用于第二个元素。

我在这里做错了什么? 谢谢!

1 个答案:

答案 0 :(得分: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

正则表达式为([^_]*)(.*)([^_]*)字符范围与下划线匹配到一个组中。 (.*)将字符串中剩余的所有内容(包括任何下划线)与第二组匹配。