Хорошо ... У меня есть неудовлетворительное решение проблемы.
Проблема в том, что у меня есть такой ввод:
{sup 19}F({sup 3}He,t){sup 19}Ne(p){sup 18}F
и нужно выводить так:
¹⁹F(³He,t)¹⁹Ne(p)¹⁸F
Сначала я использую серию замен, чтобы разбить каждую из секций {sup xx} на {sup x} {sup x}, а затем использую регулярное выражение для сопоставления каждой из них и заменяю символы их единичными эквивалентами UTF-8. , «Проблема» в том, что разделы {sup} могут иметь номера длиной 1, 2 или 3 цифры (может быть, больше, я не знаю), и я хочу «развернуть» их в отдельные разделы {sup} по одной цифре в каждой , (У меня также есть та же проблема с {sub} для подписчиков ...)
Мое текущее решение выглядит так (в Java):
retval = retval.replaceAll("\\{sup ([1-9])([0-9])\\}", "{sup $1}{sup $2}");
retval = retval.replaceAll("\\{sup ([1-9])([0-9])([0-9])\\}", "{sup $1}{sup $2}{sup $3}");
Мой вопрос: есть ли способ сделать это за один проход, независимо от того, сколько цифр (или хотя бы какое-нибудь разумное число) существует?