Как сопоставить конечные скобки с помощью регулярных выражений в java? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть шаблон, который я хочу сопоставить, используя java регулярное выражение. Шаблон иногда имеет скобки, а иногда его нет. Пример шаблона:

Test string:      (2555.45)
Test string:      50.00
Test string:     2345,46.00

Я написал приведенную ниже программу, но почему-то она не берет конечные скобки при попытке сопоставления.

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

public class Main {
    public static void main( String args[] ) {
    String re = ".*Test string:\\s+([^\\\\d]+\\d[.,]\\d+).*";
    Pattern p = Pattern.compile(re);

     List<String> inputs = Arrays.asList( "Test string:      (2555.45)", "Test string:      50.00", "Test string:     2345,46.00", "Test string:     620.26","Test string:     37687.20" );
//for (String s : arr) {
//    System.out.println(s.matches(re));
//}

inputs.forEach(in->{
     Matcher m = p.matcher(in);
   if (m.matches()) {
       System.out.println(m.group(1));
   }


});  


    }
}

Чего мне здесь не хватает. Любая подсказка будет полезна

1 Ответ

0 голосов
/ 29 апреля 2020

Скобки (( и )) - это специальные символы для механизма регулярных выражений. Чтобы go обойти это, мы избегаем их, добавляя дополнительные \ впереди. Из-за того, как работает Java, нам нужно снова убрать лишние \, поэтому для совпадения ( и ) в Java вам потребуется \\( или \\).

Поскольку в вашем тестовом случае круглые скобки могут присутствовать или отсутствовать, я предлагаю вам добавить оператор ?. Я также заметил (если я что-то упустил), что вы ожидаете совпадение 2 : символов, а не одного.

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