我正在尝试使用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
所以,它似乎适用于第一个元素(当然也适用于后两个元素),但不适用于第二个元素。
我在这里做错了什么? 谢谢!
答案 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
正则表达式为([^_]*)(.*)
。 ([^_]*)
将字符范围与下划线匹配到一个组中。 (.*)
将字符串中剩余的所有内容(包括任何下划线)与第二组匹配。