Я пытаюсь извлечь номер пропуска из строк любых из следующих форматов:Почему это компилятор Java не компилируется?
PassID_132
PassID_64
Pass_298
Pass_16
Для этого я построил следующее регулярное выражение:
Pass[I]?[D]?_([\d]{2,3})
й протестировал его в окне поиска в Eclipse , Он работал нормально.
Однако, когда я использую его в коде, он ничего не соответствует. Вот мой фрагмент кода:
String idString = filename.replaceAll("Pass[I]?[D]?_([\\d]{2,3})", "$1");
int result = Integer.parseInt(idString);
Я также попытался
java.util.regex.Pattern.compile("Pass[I]?[D]?_([\\d]{2,3})")
в выражений окно во время отладки, но это говорит "", в то время как
java.util.regex.Pattern.compile("Pass[I]?[D]?_([0-9]{2,3})")
компилируется, но Бесполезный» t соответствует чему угодно. В чем может быть проблема? ?
"\\ d" уже расширяется до "[0-9]", не помещайте его в скобки! Вы также можете сбрасывать скобки на одиночные буквы типа «I» или «D». Попробуйте «Pass (?: ID)? _ (\\ d {2,3})» – AKDADEVIL