如何使用正则表达式查找化学式

Posted

技术标签:

【中文标题】如何使用正则表达式查找化学式【英文标题】:How to find chemical formulas with regex 【发布时间】:2013-03-13 20:22:05 【问题描述】:

这个问题可能不是一个特定的编程问题,但我尝试在科学文本中找到 H20、C02 等化学公式,然后我使用这个:

(?<=[\l\u]|\.)\d+

这可行 - 但现在也可以找到“点”之后的每个浮点数:

0.1234 -> 1234 is selected.

有没有机会阻止这种情况?提前致谢!

【问题讨论】:

也许从后面删除点? 你到底想匹配什么? SMILES 格式的字符串?你能提供一些例子吗? 只是化学式,如 H20 或 SO2,请参阅编辑 :) 【参考方案1】:

您还可以包含 negative lookbehind 以防止前面的点带有数字:

(?<=[\l\u.])(?<!\d\.)\d+

【讨论】:

看起来这行得通!在我接受之前我会对其进行更多测试,但谢谢!【参考方案2】:

如果您还想匹配H2OCH3CH2CH2CH3SiO2 等字符串,您可以使用:

(?i)\b[a-z]+(?:\d+[a-z]+)*\b

\b(?:[A-Z][a-z]?)+(?:\d+(?:[A-Z][a-z]?)+)*\b

【讨论】:

以上是关于如何使用正则表达式查找化学式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式查找重叠匹配?

正则表达式查找匹配后如何替换?

如何使用正则表达式组查找多次出现?

如何在 Mongoose 中使用正则表达式查找项目 [重复]

如何使用正则表达式查找和替换文本?

如何根据键正则表达式查找值