Pattern pattern = Pattern.compile("\\d{4}\\s+[a-z|A-Z]{2}\\s+PLAIN\\sTEXT\\s+(.*?)\\(NS\\)");
Matcher matcher = pattern.matcher("2007 AL PLAIN TEXT ap2345 (NS)");
while (matcher.find())
{
System.out.println(matcher.group(1));
}
我希望它适用于
input1 = 2007 AL PLAIN TEXT ap2345 (NS)
(上面的正则表达式确实适用于此功能),但对于input2 = "ap2345"
则失败。我想在相同的组号中捕获这两个字符串,这意味着我需要使先前的捕获为可选。我怎样才能做到这一点?编辑:::当字符串值是
2007 AL PLAIN TEXT ap2345 (NS)
或ap2345
时,我希望同一个组号对两个都起作用 最佳答案
我不确定我是否正确理解了您的问题,因此在解释任何内容之前,请检查此正则表达式
(\\d{4}\\s+[a-zA-Z]{2}\\s+PLAIN\\sTEXT\\s+)?(\\w+)(\\s+\\(NS\\))?
喜欢
Pattern pattern = Pattern
.compile("(\\d{4}\\s+[a-zA-Z]{2}\\s+PLAIN\\sTEXT\\s+)?(\\w+)(\\s+\\(NS\\))?");
Matcher matcher = pattern.matcher("2007 AL PLAIN TEXT ap2345 (NS)");
while (matcher.find()) {
System.out.println(matcher.group(2));
}
示例
2007 AL PLAIN TEXT ap2345 (NS)
输出-> ap2345
Example 2用于
ap2345
输出-> ap2345
此正则表达式将尝试将可选零件
2007 AL PLAIN TEXT
存储在组1中。如果字符串不包含此零件,则组1将包含null
。可以,因为我们只对存储在第2组中的部分内容感兴趣。我认为第2组将只包含一个单词,这就是为什么我使用\\w+
(\\w
匹配字母,数字和)。如果要接受更多单词,请尝试使用_
。