正则表达式在结果字符串的开头和结尾附加额外的字符串

时间:2017-04-05 16:04:30

标签: java regex

我有

形式的字符串
^COBUYE\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \fs20\insrsid15797378 \hich\af39\dbch\af31505\loch\f39 R-NAME-FIRST COBUYER-NUMBER="1"\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid10175635\charrsid8585274 \cell 

现在我想从这个字符串中创建一个类似^COBUYER-NAME-FIRST COBUYER-NUMBER="1"的字符串。为此我尝试了这个正则表达式。

\\b(?:\\\\[a-zA-Z]+(-?[0-9]+)? ?)+ ?\\b

当我使用此正则表达式时

String tag = "^COBUYE\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid15797378 \\hich\\af39\\dbch\\af31505\\loch\\f39 R-NAME-FIRST COBUYER-NUMBER=\"1\"\\rtlch\\fcs1 \\af0\\afs20 \\ltrch\\fcs0 \\f0\\fs20\\insrsid10175635\\charrsid8585274 \\cell ";
//String tag = "\\rtlch\\fcs1^COBUYE\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid15797378 \\hich\\af39\\dbch\\af31505\\loch\\f39 R-NAME-FIRST COBUYER-NUMBER=\"1\"\\rtlch\\fcs1 \\af0\\afs20 \\ltrch\\fcs0 \\f0\\fs20\\insrsid10175635\\charrsid8585274 \\cell ";
String controlWordRegex = "\\b(?:\\\\[a-zA-Z]+(-?[0-9]+)? ?)+ ?\\b";
StringBuffer sb = new StringBuffer();
Pattern controlWordRegexPattern = Pattern.compile(controlWordRegex, Pattern.DOTALL);
Matcher controlWordRegexPatternMatcher = controlWordRegexPattern.matcher(tag);
while (controlWordRegexPatternMatcher.find()) {
    String rtfControlWord = controlWordRegexPatternMatcher.group();
    String replacementText = "";
    controlWordRegexPatternMatcher.appendReplacement(sb, replacementText);
}
controlWordRegexPatternMatcher.appendTail(sb);

然后当条件rtfControlWorld变为

String rtfControlWord = \rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \fs20\insrsid15797378 \hich\af39\dbch\af31505\loch\f39 

和sb变为^COBUYE

现在又来了条件,这次rtfControlWorld变成了

String rtfControlWord = \fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid10175635\charrsid8585274 \cell

和sb变为^COBUYER-NAME-FIRST COBUYER-NUMBER="1"\rtlch

为什么第二次从\fcs1而不是\rtlch\fcs1启动控制字? \rtlch也是以\开头的?我怎样才能让它工作,所以我只能^COBUYER-NAME-FIRST COBUYER-NUMBER="1"而不是^COBUYER-NAME-FIRST COBUYER-NUMBER="1"\rtlch

同样在第二个标签的情况下,我得到\rtlch^COBUYER-NAME-FIRST COBUYER-NUMBER="1"\rtlch。我该如何纠正?

由于

0 个答案:

没有答案