我正在尝试使用正则表达式来查找 Si
和 (P)
或 Si
和 (I)
之间的字符串匹配项。
下面是我写的。为什么它不起作用以及如何修复它?
String Channel = "Si0/4(I) Si0/6( Si0/8K Si0/5(P)";
if (Channel.length() > 0) {
String pattern1 = "Si";
String pattern2 = "(P)";
String pattern3 = "(I)";
String P1 = Pattern.quote(pattern1) + "(.*?)[" + Pattern.quote(pattern2) + "|" + Pattern.quote(pattern3) + "]";
Pattern p = Pattern.compile(P1);
Matcher m = p.matcher(Channel);
while(m.find()){
if (m.group(1)!= null)
{
System.out.println(m.group(1));
}
else if (m.group(2)!= null)
{
System.out.println(m.group(2));
}
}
}
预期输出
0/4 0/5
实际输出
0/4 0/6 0/8K Si0/5
最佳答案
在正则表达式中使用lookbehind和lookahead。并且您还需要在字符类中添加空格,这样就不会出现这个 0/8K
字符串。
(?<=Si)[^\\( ]*(?=\\((?:P|I)\\))
String str="Si0/4(I) Si0/6( Si0/8K Si0/5(P)";
String regex="(?<=Si)[^\\( ]*(?=\\([PI]\\))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group(0));
}
输出:
0/4
0/5
关于java - 使用 Java 正则表达式查找多个字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670401/