2011-02-04 294 views
6

我正在研究计算分子量的应用程序,我需要将字符串分隔为不同的分子。我一直在使用一个正则表达式来做到这一点,但我还没有得到它的工作。 我需要的正则表达式匹配像H2OCl4和Na2H2O模式它会分解成匹配,如:正则表达式匹配大写字母,数字或大写字母,小写字母和数字

  1. H2
  2. Ø
  3. CL4

  1. NA2
  2. H2
  3. Ø

我一直工作在正则表达式是这样的:

([A-Z]\d*|[A-Z]*[a-z]\d*) 

这真的非常接近,但它现在打破了比赛变成这样:

  1. H2
  2. Ø
  3. C
  4. l4

我需要将Cl4视为一场比赛。任何人都可以帮我解决这个问题。我对正则表达式很陌生。谢谢。

回答

9

我想你想要的是"[A-Z][a-z]?\d*"

也就是说,一个大写字母,后面跟着一个可选的小字母,随后的数字一个可选的字符串。

如果你想匹配0,1,或2小写字母,那么你可以这样写:

"[A-Z][a-z]{0,2}\d*"

但是请注意,这两种正则表达式假设输入数据有效。鉴于不良数据,它将跳过不良数据。例如,如果输入字符串为 “H2ClxxzSO4”,你会得到:

  1. H2
  2. CLX
  3. 小号
  4. O4

如果要检测坏数据,您需要检查返回的Match对象的Index属性,以确保它等于起始索引。

+0

是的,似乎工作。谢谢。 –

+2

为了完整性,您可能需要两个可选的小写字母来处理元素113至118,这些元素仍被命名为Ununtrium(符号Uut)等。 –

+1

打我吧。 :) – UnkwnTech

相关问题