Мой образец ввода - "0X10001,0X10002,0X610001,0X610002"
System.out.println(st.replaceAll(regex, "0"));
Мой вывод должен быть "010001,010002,610001,610002"0X следует заменить на
.
0 -> если длина 7"" -> если длина 8
какое регулярное выражение мне нужно использовать? ([0X]){1,2} не получает от этого желаемого результата.
([0X]) {1,2} это не дает желаемого результата.
сделайте две отдельные замены: первая замените 0X(\d{5}) на 0$1, вторая замените 0X(\d{6}) на $1
@AdrianShum Вы захотите изменить порядок и / или проверить границы слов.
@Adrian Shum, спасибо, когда я использую две замены вроде этого System.out.println (st.replaceAll ("0X (\\ d {5})", "0 $ 1"). ReplaceAll ("0X (\ d {6) }) "," $ 1 ")); он показывает ошибку (говорит, что я должен использовать \ b, \ n ...…) в eclipse
@shmoesel: да, я намеренно не давал полное регулярное выражение, а просто давал основную идею (и ожидал, что OP напишет свое)
Вам нужно избегать обратной косой черты.




Делай это так:
String st = "0X10001,0X10002,0X610001,0X610002";
System.out.println(st.replaceAll("0X(?=\\d{6})|(0)X(?=\\d{5})", "$1"));
Вывод
010001,010002,610001,610002
Объяснение
Когда механизм регулярных выражений сканирует, шаблон | всегда будет пробовать левую сторону перед правой, поэтому по мере продвижения он сначала будет пробовать 0X(?=\\d{6}), который соответствует 0X, за которым следуют 6 цифр (с использованием положительного упреждения нулевой ширины) . Если это совпадает, ничего не записывается, поэтому $1 пуст, а 0X заменяется пустой строкой.
Если это не совпадает, он пытается (0)X(?=\\d{5}), то есть сопоставить 0X, за которым следуют 5 цифр. Если это совпадает, 0 попадает в группу 1, поэтому $1 - это 0, а 0X заменяется на 0.
Если ни один из них не соответствует, механизм регулярных выражений попытается еще раз в следующей позиции во входной строке.
сложно, но интересно :)
спасибо за объяснение и ответ @Andreas
replaceAll("0X(?=\\d{6})|(0)X(?=\\d{5})", "$1")
отлично работает для данных вопросов
Опубликуйте регулярное выражение, которое у вас уже есть и которое вы хотите улучшить.