2013-03-13 61 views
2

化学公式这个问题可能不是一个特定的编程问题,但我试图找到化学公式像H20,C02等在scientic文本和我用这个:如何找到与正则表达式

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

这作品 - 但现在也发现'点'后的每个浮点数:

0.1234 -> 1234 is selected. 

是否有机会防止这种情况?提前致谢!

+0

也许从t中删除点他向后看? – Bergi 2013-03-13 20:25:06

+3

你究竟想要匹配什么? SMILES格式化的字符串?你能提供一些例子吗? – woemler 2013-03-13 20:25:31

+0

只是像H20或SO2的化学公式,请参阅编辑:) – Rockbot 2013-03-13 20:36:26

回答

1

您还可能包括negative lookbehind防止以数字在前点前:

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

它看起来像这样的作品!在我接受之前,我会给它更多的测试,但是谢谢! – Rockbot 2013-03-13 20:39:40

1

如果你想也匹配像H2O字符串,CH3CH2CH2CH3SiO2你可以使用:

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

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