Как я могу инвертировать выражение регулярного выражения, чтобы использовать его в методе java replaceAll?

Мне нужен последний буквенный символ в примере строки: ABRACADABRA123456. Выражение регулярного выражения [a-zA-Z](?=\d+) дает мне совпадение во всех моих случаях. Как я могу изменить (инвертировать) выражение, чтобы использовать его в методе Java, например: "ABRACADABRA123456".replaceAll(<inverse-regex>,"")?

ВХОД: ABRACADABRA123456
ИСПОЛЬЗОВАНИЕ: "ABRACADABRA123456".replaceAll(...)
ВЫВОД: A (последний буквенный символ строки)

РЕШЕНО: System.out.println("ABRACADABRA123456".replaceAll("([\\D]+)([a-zA-Z](?=\\d+))([\\d]+)","$2")));


person usmandam    schedule 11.02.2015    source источник
comment
Каков ваш ожидаемый результат?   -  person Avinash Raj    schedule 11.02.2015
comment
ожидаемый вывод буквенный символ в круглых скобках: ABRACADABR(A)123456   -  person usmandam    schedule 11.02.2015
comment
@usmandam Если исходное регулярное выражение представляет собой «букву перед несколькими цифрами», то что такое «обратное»? Буква после каких-то цифр? Буква не, за которой следуют цифры? Цифра перед несколькими буквами? Я мог бы продолжить ...   -  person Biffen    schedule 11.02.2015


Ответы (1)


[a-zA-Z](?=\d+) не соответствует последнему буквенному символу.

System.out.println("ABRACADABRA123456".replaceAll("([A-Za-z])(?=[^A-Za-z]*$)","($1)"));

Вышеупомянутое регулярное выражение захватит алфавит, только если за ним следует любой неалфавитный символ от нуля или более раз до последнего. Таким образом, он соответствует только последнему алфавиту.

Вывод:

ABRACADABR(A)123456
person Avinash Raj    schedule 11.02.2015
comment
ожидаемый результат - последний A - person usmandam; 11.02.2015
comment
см. приведенное выше регулярное выражение. Он соответствует последнему A. Вы также можете использовать вышеуказанное регулярное выражение в классах шаблонов и сопоставлений. - person Avinash Raj; 11.02.2015