正则表达式匹配大写字母,数字或大写字母,小写字母和数字

时间:2011-02-04 20:41:56

标签: c# regex string

我正在开发一种能够计算分子量的应用程序,我需要将一个字符串分成不同的分子。我一直在使用正则表达式来做这个,但我还没有完全开始工作。 我需要正则表达式来匹配像H2OCl4和Na2H2O这样的模式,它会将其分解为匹配:

  1. H2
  2. 0
  3. CL4

    1. NA2
    2. H2
    3. 0
    4. 我一直在研究的正则表达式是:

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

      它非常接近,但它目前将比赛分成了这个:

      1. H2
      2. 0
      3. C
      4. L4
      5. 我需要将Cl4视为一场比赛。任何人都可以帮助我完成我在此遗漏的最后一部分。我对正则表达式很新。感谢。

2 个答案:

答案 0 :(得分:9)

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

即大写字母,后跟可选的小写字母,后跟可选的数字字符串。

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

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

但请注意,这两个正则表达式都假定输入数据有效。鉴于数据不佳,它会跳过不良数据。例如,如果输入字符串是“H2ClxxzSO4”,那么您将获得:

  1. H2
  2. CLX
  3. 取值
  4. O4
  5. 如果要检测错误数据,则需要检查返回的Index对象的Match属性,以确保它等于起始索引。

答案 1 :(得分:0)

请注意,如果您希望在输入中使用国际字符,例如带有变音符号的字母(ñ,é,è,ê,ë等),则应使用相应的unicode category。在您的情况下,您想要的是@"\p{Lu}\p{Ll}?\d*"