Шаблон регулярного выражения для извлечения чисел до и после определенного слова в Java - PullRequest
0 голосов
/ 09 июня 2019

Я хочу извлечь только числа из приведенного ниже набора строк. Основываясь на приведенном ниже условии, я хочу извлечь все между словом «емкость» и первым числом перед «%».

Ввод - ТестированиеЕмкость жесткого диска и использованное пространство составляет & 56, а 98% свободного места составляет 2%.

Вывод должен быть: 98.

1 Ответ

0 голосов
/ 09 июня 2019

Мы можем использовать lookaround, если это будет нормально, с простым выражением, таким как:

(?<=capacity).*?([0-9]+)(?=%)

Демо

const regex = /(?<=capacity).*?([0-9]+)(?=%)/gm;
const str = `Testing Harddisk capacity and used space is &56 and it's 98% free space is 2%`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Java

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

final String regex = "(?<=capacity).*?([0-9]+)(?=%)";
final String string = "Testing Harddisk capacity and used space is &56 and it's 98% free space is 2%";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...