我有一个String,其中标签可以出现在像^...^
这样的插入符号sysmbol中。我找到了一个正则表达式,可以在\\^.*?\\^
之类的字符串中找到标签。现在找到标签后,我的标签可以包含RTf控制字。它并不总是,但在某些情况下它可以。以下是此类标记^L\\hich\\af39\\dbch\\af31505\\loch\\f39 OT-CITY^
的示例。现在我想替换此标签中的RTF控制字。为此,我尝试制作一个可以以\
开头的正则表达式,可以在斜杠后包含字母或数字,也可以包含空格。并将其替换为空""
。这样我就剩下LOT-CITY
了。我该怎么做。我尝试了以下
String tagRegex = "\\^.*?\\^";
Pattern tagRegexPattern = Pattern.compile(tagRegex, Pattern.MULTILINE);
Matcher tagRegexPatternMatcher = tagRegexPattern.matcher(input);
while(tagRegexPatternMatcher.find()) { // work
String tag = tagRegexPatternMatcher.group();
String controlWordRegex = "\\b\\[a-zA-Z]+(-?[0-9]+)? ? \\b";
Pattern controlWordRegexPattern = Pattern.compile(controlWordRegex, Pattern.MULTILINE);
Matcher controlWordRegexPatternMatcher = controlWordRegexPattern.matcher(tag);
while (controlWordRegexPatternMatcher.find()) { // didn't work
String matchedText = controlWordRegexPatternMatcher.group();
}
}
以下是我尝试的输入
String input = "{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid10175635\\charrsid8585274 \\hich\\af39\\dbch\\af31505\\loch\\f39 Build Job City:\\par \\hich\\af39\\dbch\\af31505\\loch\\f39 ^L\\hich\\af39\\dbch\\af31505\\loch\\f39 OT-CITY^}";
我也尝试了以下\\b\\[a-zA-Z0-9]+ \\B
。还有边界和无边界匹配。但没有得到它的工作。我怎样才能做出这样的正则表达式?
由于
答案 0 :(得分:0)
以下是解决问题的方法:
String input = "{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid10175635\\charrsid8585274 \\hich\\af39\\dbch\\af31505\\loch\\f39 Build Job City:\\par \\hich\\af39\\dbch\\af31505\\loch\\f39 ^L\\hich\\af39\\dbch\\af31505\\loch\\f39 OT-CITY^}";
String tagRegex = "\\^(.*?)\\^";
Pattern tagRegexPattern = Pattern.compile(tagRegex, Pattern.DOTALL);
Matcher tagRegexPatternMatcher = tagRegexPattern.matcher(input);
while(tagRegexPatternMatcher.find()) { // work
String tag = tagRegexPatternMatcher.group(1);
String controlWordRegex = "\\b(?:\\\\[a-zA-Z]+(-?[0-9]+)? ?)+ \\b";
System.out.println(tag.replaceAll(controlWordRegex, ""));
}
请参阅Java demo
首先,我在初始正则表达式中添加了一个捕获组,以便在^
个符号之间抓取文本。
然后,第二个正则表达式匹配
\\b
- 一个单词边界(必须有字符串的开头或之前的单词char)(?:\\\\[a-zA-Z]+(-?[0-9]+)? ?)+
- 非捕获组((?:....)
,仅用于将模式分组以匹配它们作为序列)匹配1个或多个序列:
\\\\
- \
[a-zA-Z]+
- 一个或多个字母(-?[0-9]+)?
- 可选-
的可选序列,然后是1+位数 ?
- 可选空格(为了安全而替换为\\s
)\\b
- 一个主要的单词边界(必须有字符串的结尾或后面的单词char)此正则表达式在.replaceAll
方法中用于从使用第一个正则表达式获得的匹配项中删除RTF代码。