好的...我有一個問題不能令人滿意的解決方案。替換可變數量的項目...正則表達式?
問題是我有輸入像這樣:
{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}部分,每個部分各有一個數字。 (我也有{}子對標同樣的問題...)
我目前的解決方案看起來像這樣(在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}");
我的問題:有沒有辦法在這樣做無論有多少位數字(或者至少是一些合理的數字),都可以單次傳遞?
爲什麼您將'{sup'部分標記爲可選項?它看起來會匹配「1}」。 –
@Mike:OP希望用'{sup 1} {sup 2} {sup 3}'來代替'{sup 123}'。只有第一個數字前面有'{sup',最後一個數字後面有'}':這就是爲什麼它是可選的。 –
@Mike:啊,我明白你的意思了。因此,我的評論「你必須小心,它不會*超過*!」。看到我的第二個解決方案,那個解決方案就是'\ G'。 –