java - 如何以这种格式编写java模式 : any characters (int, int) (int,int) number number any number of (int,int,int)

标签 java regex

例如

Maze0.bmp (0,0) (319,239) 65 120
Maze0.bmp (0,0) (319,239) 65 120 (254,243,90)  
Maze0.bmp (0,0) (319,239) 65 120 (254,243,90) (0,0,0)
Maze0.bmp (0,0) (319,239) 65 120 (254,243,90) (0,0,0) (11,33,44)

我想要获取 maze0.bmp 和所有数字。我有:

Pattern pattern = Pattern.compile("([A-z][^\\s]*)\\s+\\((\\d+),(\\d+)\\)\\s+\\((\\d+),(\\d+)\\)\\s+(\\d+)\\s+(\\d+)\\s+(\\((\\d+),(\\d+),(\\d+)\\)\\s*)"); 
BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in));
String input;
Matcher matcher = null; 
boolean isMatched = false; 
while (!isMatched) {
    System.out.println("Please enter right format\n");
    input = stdin.readLine(); 
    matcher = pattern.matcher(input); 
    while(matcher.find()) {
        isMatched = true; 
        for (int i = 1; i <= matcher.groupCount(); ++i) 
            System.out.println(matcher.group(i));
    }
}

但这是正确的。例如,如果我的输入是

Maze0.bmp (0,0) (319,239) 65 120 (254,243,90) (0,0,0)

无法获取最后一个元组(0,0,0)。

最佳答案

这是我能想到的最好的。请注意,我使用了两种模式,因为出于某种原因 Java 拒绝捕获重复组(如果有人碰巧知道原因,请发表评论)。

final Pattern outerPattern = Pattern.compile("(.*?) \\((\\d+),(\\d+)\\) \\((\\d+),(\\d+)\\) (\\d+) (\\d+)(.*)");
final Pattern optionalTouplePattern = Pattern.compile(" \\((\\d+),(\\d+),(\\d+)\\)");

final BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
boolean isMatched;

do
{
    System.out.println("Please enter right format:");
    Matcher m = outerPattern.matcher(stdin.readLine());
    if (isMatched = m.find())
    {
        System.out.println(String.format("name='%s', first touple: [%s,%s], second touple: [%s,%s], first single number: %s, second single number: %s", m.group(1), m.group(2), m.group(3), m.group(4), m.group(5), m.group(6), m.group(7)));
        m = optionalTouplePattern.matcher(m.group(8));
        while(m.find())
        {
            System.out.println(String.format("+ optional touple: [%s,%s,%s]", m.group(1), m.group(2), m.group(3)));
        }
    }
}while(!isMatched);

关于java - 如何以这种格式编写java模式 : any characters (int, int) (int,int) number number any number of (int,int,int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911671/

相关文章:

java - JSF 生命周期和自定义组件

java - SQLException - JDBC 驱动程序和 Tomcat

java - 在不使用 Scanner 的情况下从控制台获取用户输入

java - Java 中的完整日期验证

java - 如何通过正则表达式找到特殊模式

java - 程序排除除 1,2,3 之外的数字

javascript - 基于分隔符javascript正则表达式分割字符串

java - java中如何将给定的日期转换为年,月,日

java - 在 Java 中匹配\a574322 的正则表达式

java - 代码在 txt 文件中找不到字符串。我的代码有什么问题吗?