Java регулярное выражение с группами - PullRequest
0 голосов
/ 18 июля 2011

Я хочу иметь возможность анализировать строки ниже с одним регулярным выражением, используя группы?Между тире и цифрами может быть один или несколько пробелов.

Примеры входных строк:

"0.4 - 1.2 Mathematics"
"0.7-1.3 Physics"
"0.3-    0.7      Chemistry"
"4.5 Biology"
"2 Calculus"

group(1) -> lowGrade -> Float
group(2) -> highGrade -> Float (if exists)
group(3) -> class -> String

Можете ли вы помочь с регулярным выражением?Спасибо

Ответы [ 3 ]

1 голос
/ 18 июля 2011

Итак, вот ваше рабочее решение, если «highGrade» недоступен, вторая группа - NULL.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{
    public static void main(String[] args)
    {
        String Text = "0.4 - 1.2 Mathematics";
        Pattern p = Pattern.compile("^" + // Match the start of the string
                "(\\d+(?:\\.\\d+)?)" + // Match the first float, the fraction is optional, (?:) is a non capturing group
                "(?:\\s*-\\s*" + // Match the whitespace and the - . This part including the following float is optional
                "(\\d+(?:\\.\\d+)?))?" + // Match the second float, because of the ? at the end this part is optional
            "\\s*(.*)" + // Match the whitespace after the numbers and put the rest of the chars in the last capturing group
            "$"); // Match the end of the string

        Matcher m = p.matcher(Text);

        if (m.matches()) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
            System.out.println(m.group(3));
        }
    }
}
1 голос
/ 18 июля 2011
String s = "Mathematics 0.4 - 1.2";

Matcher m = Pattern.compile("(.*?) *([0-9.]+) *(- *([0-9.]*))?").matcher(s);
if(m.matches()){
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println(m.group(4));
}
0 голосов
/ 18 июля 2011

Вы пробовали это:

String s = "Mathematics 0.4 - 1.2";
pattern = Pattern.compile("([^\d\.\s]+)\b\s+(\d+\.\d+)\D*(\d+\.\d+)?");
matcher = pattern.matcher(s);
if (matcher.matches()) {
    System.out.println(matcher.group(1));
    System.out.println(matcher.group(2));
    System.out.println(matcher.group(3));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...