正则表达式替换特定位置的字符串

时间:2015-01-29 14:23:30

标签: java regex

MSH|^~\&|RAD|MCH|SOARCLIN|MCH|201309281506||ORU^R01|RMS|P|2.4 PID|0001|_MISSING_|059805^a~059805^a~059805^a||RENNER^KATHRYN^

在如上所述的字符串中,我需要在|的基础上替换字符串(管道标志)计数。

e.g。 :

  

MSH线要在(|)管道标志" MCH"的3rth位置后更换   用" ABC"

     

输入:MSH | ^〜\& | RAD | MCH | SOARCLIN | MCH | 201309281506 || ORU ^ R01 | RMS | P | 2.4

     

输出:MSH | ^〜\& | RAD | MCH | SOARCLIN | ABC | 201309281506 || ORU ^ R01 | RMS | P | 2.4

1 个答案:

答案 0 :(得分:1)

String repSection( String del, int count, String rep ){
    String[] toks = theString.split( Pattern.quote( del ) );
    toks[count] = rep;
    theString = String.join( del, toks );
}

呼叫:

String result = repSection( "|", 3, "ABC" );

这取决于单独计算;第3和第4个管道字符之间有什么关系并不重要。

我更喜欢这种花哨和难以维护的正则表达式。

s = s.replaceAll( "^((?:[^|]*\\|){3})[^|]*", "$1|ABC" );

同样,这并不关心第3和第4个管道符号之间的内容。