【问题标题】:Ruby regex for chemical formula subscript/superscript用于化学式下标/上标的 Ruby 正则表达式
【发布时间】:2018-05-25 08:48:23
【问题描述】:

我想将 sub 和 sup 标签替换为化学式,例如 C7[2H]5NaO2,并得到如下结果:

C<sub>7</sub>[<sup>2</sup>H]<sub>5</sub>NaO<sub>2</sub>

标签内的数字可以是两位数。到目前为止,我知道 /(\d+) / 将匹配所有数字,而 /[(\d+)/ 匹配 [ 之后的数字,但我不知道如何将这两者结合起来。

【问题讨论】:

  • 您还有其他示例吗,我担心一旦您尝试将其应用于其他公式,针对此单个示例给出的任何解决方案都会失败
  • 这是一个比你想象的更复杂的问题,如果你希望它是通用的。化学公式几乎都有自己的语法。您可能不得不求助于 Parslet 或 TreeTop 之类的语法分析器。
  • 这是编程语言中的Ruby还是&lt;ruby&gt;中的Ruby?
  • 哪个是输入,哪个是输出?
  • 为什么这个问题被否决了?我提出了这个公式的一个特定场景,这是数据将进入的格式。我不关心公式的其他变体,我没有在问题中说这个公式会有变体。

标签: html ruby regex


【解决方案1】:

我会分两个单独的步骤来做。

首先,用sup标签包围的相同数字替换前面有字母的数字。

匹配:(?&lt;=[A-Z])\d+

替换:&lt;sup&gt;\0&lt;/sup&gt;

然后取结果并将[前面的数字替换为sub标签包围的相同数字:

匹配:(?&lt;=\[)\d+

替换:&lt;sub&gt;\0&lt;/sub&gt;

【讨论】:

  • 谢谢你,修改你的答案后:'C7[2H]5NaO2'.gsub(/(?&lt;=[A-Z|\]])\d+/, '&lt;sub&gt;\0&lt;/sub&gt;').gsub(/(?&lt;=\[)\d+/, '&lt;sup&gt;\0&lt;/sup&gt;') 成功了
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 2012-07-24
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多