Шаблон для вытягивания струн - PullRequest
0 голосов
/ 06 октября 2011

Я не новичок в Java, но раньше не имел дело с Regex и Patterns.Я хочу взять строку типа

"Class: " + data1 + "\nFrom: " + data2 + " To: " + data3 + "\nOccures: " + data4 + " In: " + data5 + " " + data6;

и извлечь только данные от data_1 до data_n.
Я ценю любую помощь.

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

как насчет использования split () с ":", затем из splitted String [] получить строку [2i + 1]?(я из 0)

0 голосов
/ 06 октября 2011

Используйте это регулярное выражение:

Pattern pattern = Pattern.compile("Class: (.+?)\nFrom: (.+?) To: (.+?)\nOccures: (.+?) In: (.+?) (.+?)");
Matcher matcher = pattern.matcher(yourInputString);
if (matcher.find())
{
     String data1 = matcher.group(1);
     String data2 = matcher.group(2);
     String data3 = matcher.group(3);
     String data4 = matcher.group(4);
     String data5 = matcher.group(5);
     String data6 = matcher.group(6);
} else
{
    // String didn't match the specified format
}

Пояснение:

.+? будет соответствовать любому символу в течение неопределенного времени, но не будет жадным.
(), использование скобок создаст группу. Группе присваивается индекс, начинающийся с 1 (поскольку группа 0 соответствует полному совпадению)

Итак, (.+?) будет создавать группы любого персонажа.

И что делает сопоставитель, ищет весь шаблон где-то во входной строке. Но так как вы указали формат, мы точно знаем, как будет выглядеть вся ваша строка. Единственное, что вам нужно сделать, это скопировать формат и заменить данные, которые вы хотите извлечь, на « что-то » (.+?), индекс которого вы задаете, создавая его группу.

После этого средство сопоставления попытается найти шаблон (выполнено matcher.find()), и вы спросите их, каково содержание групп от 1 до 6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...