2011-02-04 10 views
6

Sto lavorando a un'applicazione che calcolerà il peso molecolare e ho bisogno di separare una stringa in diverse molecole. Ho usato una regex per farlo, ma non l'ho ancora fatto funzionare. Ho bisogno alla regex di trovare su modelli come H2OCl4 e Na2H2O dove sarebbe suddividerlo in partite come:Regex da abbinare su maiuscole, cifre o maiuscole, minuscole e cifre

  1. H2
  2. O
  3. CL4

  1. Na2
  2. H2
  3. O

L'espressione regolare che ho lavorato su questo:

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

E 'davvero vicino ma attualmente rompe le partite in questo:

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

Ho bisogno che il Cl4 sia considerato una corrispondenza. Qualcuno può aiutarmi con l'ultima parte che mi manca in questo. Sono piuttosto nuovo alle espressioni regolari. Grazie.

risposta

9

penso che quello che vuoi è "[A-Z][a-z]?\d*"

Cioè, una lettera maiuscola, seguita da una piccola lettera opzionale, seguito da una stringa facoltativa di cifre.

Se si desidera far corrispondere 0, 1, o 2 lettere minuscole, allora si può scrivere:

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

Si noti, tuttavia, che entrambe queste espressioni regolari per scontato che i dati di input è valido. Dati errati, salteranno i dati errati. Ad esempio, se la stringa di input è "H2ClxxzSO4", si sta andando ad ottenere:

  1. H2
  2. Clx
  3. S
  4. O4

Se si desidera rilevare cattiva dati, dovrai verificare la proprietà Index dell'oggetto restituito per assicurarti che sia uguale all'indice iniziale.

+0

Sì, sembra funzionare. Grazie. –

+2

Per completezza, probabilmente vorrai due lettere minuscole opzionali, per gestire gli elementi da 113 a 118, che sono ancora chiamati Ununtrium (simbolo Uut) e simili. –

+1

Picchiami. :) – UnkwnTech

Problemi correlati