我有一个带字母的字符串,后跟数字(1-4)。例如
String input = "A1 B1 P3 D1 D2 D3 D4 F3 F3 Z1 Z2 Z3 Z4 P2";
我希望以连续的方式找到具有所有4个数字(1到4)的字母表的字符串。在上面的示例中,它是D1 D2 D3 D4
或Z1 Z2 Z3 Z4
。
有没有可能的方法可以在java中使用RE来匹配它?
答案 0 :(得分:4)
是的,您可以通过反向引用来实现。
这是一个完全可执行的程序:
import java.util.regex.*;
public class Four {
static String input = "A1 B1 P3 D1 D2 D3 D4 F3 F3 Z1 Z2 Z3 Z4 P2";
static Pattern four = Pattern.compile("([A-Z])1 \\12 \\13 \\14");
public static void main(String[] args) {
Matcher m = four.matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}
}
}
输出
D
Z
你正在寻找的正则表达式是
([A-Z])1 \\12 \\13 \\14"
匹配
\1
反向引用,匹配第一个括号中匹配的字符串的内容。因此,如果您之前有D1
,\1
匹配D
。如果您的用例允许,您可能希望用\\s+
替换单个空格,即一个或多个空格字符。
修改强>
group(1)
获取括号内匹配的值。如果将其更改为group(0)
,您将获取整个匹配的字符串,然后程序将输出
D1 D2 D3 D4
Z1 Z2 Z3 Z4