шаблон Java принимает строку с пробелом - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь найти строку до и после ключевого слова, используя pattern и matcher. В настоящее время у меня есть этот код

Pattern p = Pattern.compile("([\\w.]+)\\W+=\\W+([\\w.]+)");
        Matcher m = p.matcher("something = 1.21 and another = 2 && something else == 123?");
        while (m.find())
            System.out.printf("'%s', '%s'%n", m.group(1), m.group(2));

выход:

'something', '1.21'
'another', '2'
'else', '123'

Я пытаюсь передать "=" только вместо "=", потому что я не хочу, чтобы "==" появлялось в списке.

всякий раз, когда я пытаюсь это сделать, ничего не печатается.

желаемый вывод:

'something', '1.21'
'another', '2'

1 Ответ

2 голосов
/ 05 июня 2019

Я думаю, что проблема с вашим текущим шаблоном в том, что \W+ соответствует пробелу и любому другому символу, не содержащему слова, включая =. Это вызывает ложное совпадение термина ==. Я рекомендую просто использовать \s* для представления разделителя между именем / значением переменной и символом. Вот немного обновленная версия вашего скрипта:

Pattern p = Pattern.compile("([\\w.]+)\\s*=\\s+([\\w.]+)");
Matcher m = p.matcher("something = 1.21 and another = 2 && something else == 123?");
while (m.find()) {
    System.out.printf("'%s', '%s'%n", m.group(1), m.group(2));
}

Это выводит:

'something', '1.21'
'another', '2'
...