c# - 匹配大写字母、数字或大写、小写和数字的正则表达式

标签 c# regex string

我正在开发一个计算分子量的应用程序,我需要将一个字符串分成不同的分子。我一直在使用正则表达式来执行此操作,但我还没有完全使用它。 我需要正则表达式来匹配像 H2OCl4 和 Na2H2O 这样的模式,它将把它分解成像这样的匹配:

  1. H2
  2. Cl4

  1. Na2
  2. H2

我一直在研究的正则表达式是这样的:

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

它真的很接近,但它目前将比赛分成这样:

  1. H2
  2. C
  3. l4

我需要将 Cl4 视为一场比赛。任何人都可以帮助我解决我在此遗漏的最后一部分。我对正则表达式很陌生。谢谢。

最佳答案

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

即,一个大写字母,后跟一个可选的小写字母,再后跟一个可选的数字串。

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

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

但是请注意,这两个正则表达式都假定输入数据是有效的。给定坏数据,它将跳过坏数据。例如,如果输入字符串是“H2ClxxzSO4”,您将得到:

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

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

关于c# - 匹配大写字母、数字或大写、小写和数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902704/

相关文章:

c++ - 为什么这个程序在 Clang 或 GCC 下不能正常运行?

javascript - 在大循环 : . indexOf(str) 或 .match(regex) 中使用什么具有更高的性能?

java - 想要借助正则表达式替换标签中的值属性吗?

c# - EntityFramework Code First 1对1数据添加

php/regex : How to replace part of a found pattern, 但其余部分保持原样?

c# - 同时从远程服务下载 JSON 数据

string - 是否有类似于 netlogo 中包含的内容

c++ - 从标准输入读取字符串

c# - Microsoft图表控件无法设置背景透明

c# - 使用 JSON.NET 解析 JSON 数据