Regex для сопоставления заглавной буквы, цифры или заглавной буквы, строчных букв и цифр - PullRequest
6 голосов
/ 04 февраля 2011

Я работаю над приложением, которое рассчитывает молекулярную массу, и мне нужно разделить строку на разные молекулы.Я использовал регулярные выражения, чтобы сделать это, но я не совсем заставил его работать.Мне нужно, чтобы регулярное выражение совпадало с такими образцами, как H2OCl4 и Na2H2O, где оно разбивалось бы на такие совпадения, как:

  1. H2
  2. O
  3. Cl4

  1. Na2
  2. H2
  3. O

Регулярное выражение, над которым я работал, это:

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

Это действительно близко, но в настоящее время разбивает спички на это:

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

Мне нужно, чтобы Cl4 считался одним матчем.Может ли кто-нибудь помочь мне с последней частью, которую я пропускаю в этом.Я довольно новичок в регулярных выражениях.Спасибо.

1 Ответ

9 голосов
/ 04 февраля 2011

Я думаю, что вы хотите: "[A-Z][a-z]?\d*"

То есть заглавная буква, за которой следует необязательная маленькая буква, за которой следует необязательная строка цифр.

Если вы хотитесопоставляя 0, 1 или 2 буквы нижнего регистра, вы можете написать:

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

Однако обратите внимание, что оба эти регулярных выражения предполагают, что входные данные действительны.При наличии неверных данных он будет пропускать неверные данные.Например, если входная строка «H2ClxxzSO4», вы получите:

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

Если вы хотите обнаружить неверные данные, вам нужно проверить свойство Index возвращенного объекта Match, чтобы убедиться, что он равен начальному индексу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...