在我本书的当前版本中,我使用静态引用,但现在我想使用动态引用,使用\label
和\ref
并执行适当的替换。一些替换示例如下:
Figure 5-6 -----> Figure \ref{0506}
Figure 2-17 ----> Figure \ref{0217}
Figure 14-4 ----> Figure \ref{1404}
Figure 34-45 --> Figure \ref{3445}
Figure 12-109 ---> Figure \ref{12109}
由于有大约 2000 个这样的情况,我需要一个正则表达式(最好在 WinEdt 中)。我无法构建这样的表达式。有人能帮我吗?非常感谢!
答案1
我将分三个阶段完成此操作,我将使用 sed 语法,但正则表达式或多或少可以在系统之间移植。
用零填充个位数的情况(第一部分)
$ echo 'Figure 5-6' | sed -e 's/Figure \([0-9]\)-/Figure 0\1-/' Figure 05-6
用零填充个位数的情况(第二部分)
$ echo 'Figure 05-6 ' | sed -e 's/Figure \([0-9]\+\)-\([0-9][^0-9]\)/Figure \1-0\2/' Figure 05-06
然后转换为
\ref
$ echo 'Figure 05-06 ' | sed -e 's/Figure \([0-9]\+\)-\([0-9]\+\)/Figure \\ref{\1\2}/' Figure \ref{0506}
答案2
@David Carlisle 我在 Winedt 中做了同样的事情(反向引用 \1、\2 等)
Case 1 ---> Figure \(1[0-9]\)-\(2[0-9]\)~[0-9] e.g. 2-4. ===> Figure 0\1-0\2 and then Figure \\ref\{0\10\2\}
Case 2 ---> Figure \(1[0-9]\)-\(2[0-9][0-9]\)~[0-9] e.g. 2-14. ===> Figure 0\1-\2 and then Figure \\ref\{0\1\2\}
Case 3 ---> Figure \(1[0-9][0-9]\)-\(2[0-9]\)~[0-9] e.g. 12-4. ===> Figure \1-0\2 and then Figure \\ref\{\10\2\}
Case 4 ---> Figure \(1[0-9][0-9]\)-\(2[0-9][0-9]\)~[0-9] e.g. 12-14. ===> Figure \1-\2 and then Figure \\ref\{\1\2\}
(当然第四种情况中间步骤不是必要的)。