2011-02-04 291 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

相關問題