替换wiki中的chemform - regexp

时间:2012-06-19 22:13:35

标签: regex

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

<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 tool的正则表达式:

匹配<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>

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

1 个答案:

答案 0 :(得分:0)

您可以使用Notepad ++,它可以继续进行条件替换(您可以在previous postWiktor 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>