1

你能给我一些建议吗,我正在替换<chemform>我的wiki中不再使用的代码......字符串通常很简单,如下所示:

<chemform>CH3COO-</chemform>
<chemform>Ba2+</chemform>
<chemform>H2CO3</chemform>

我需要将它们替换为:

CH<sub>3</sub>COO<sup>-</sup>
Ba<sub>2</sub><sup>+</sup>
H<sub>2</sub>CO<sub>3</sub>

到目前为止,我为RegExr 工具提出了这个正则表达式:

匹配<chemform\b[^>]*>(\D*?)([0-9]*)(\D*?)(\D*?)([0-9]*)(\D*?)([-+]*?)</chemform>

替换$1<sub>$2</sub>$3$4<sub>$5</sub>$6<sup>$7</sup>

我知道代码很糟糕,但到目前为止,它一直在为我工作,除了它让我得到空字符串,例如<sub></sub>

<sub></sub>CH<sub>3</sub>COO<sup>-</sup>
<sub></sub>Ba<sub>2</sub><sup>+</sup>
H<sub>2</sub>CO<sub>3</sub><sup></sup>

如何在不进行第二次替换搜索的情况下摆脱这些?非常感谢!

4

1 回答 1

0

您可以使用 Notepad++,它能够进行条件替换(您可以在Wiktor Stribiżew的上一篇文章中获得详细信息)。

使用以下模式:

  • 匹配:([A-Za-z]+(?=[-+\d]))(?<sub>\d+)?(?<sup>[-+])?(?=[-+\w]*</chemform>)
  • 代替:$1(?{sub}<sub>$+{sub}</sub>)(?{sup}<sup>$+{sup}</sup>)

鉴于您的输入样本,我得到:

<chemform>CH<sub>3</sub>COO<sup>-</sup></chemform>  
<chemform>Ba<sub>2</sub><sup>+</sup></chemform>  
<chemform>H<sub>2</sub>CO<sub>3</sub></chemform>
于 2017-10-15T07:18:03.767 回答