【问题标题】:Regex to match on capital letter, digit or capital, lowercase, and digit正则表达式匹配大写字母、数字或大写、小写和数字
【发布时间】:2011-02-04 20:41:56
【问题描述】:

我正在开发一个计算分子量的应用程序,我需要将一个字符串分成不同的分子。我一直在使用正则表达式来做到这一点,但我还没有完全让它发挥作用。 我需要正则表达式来匹配 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 视为一场比赛。任何人都可以帮助我解决我在此缺少的最后一部分。我对正则表达式很陌生。谢谢。

【问题讨论】:

    标签: c# regex string


    【解决方案1】:

    我想你想要的是"[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 属性,以确保它等于起始索引。

    【讨论】:

    • 为了完整起见,您可能需要两个可选的小写字母来处理元素 113 到 118,它们仍被命名为 Ununtrium(符号 Uut)等。
    • @CoderX_599:如果它解决了您的问题,请不要忘记接受答案。
    • 如何修改它以接受像 Uut 这样带有两个小写字母的元素。我希望能够处理所有元素。我对正则表达式还是很陌生:)
    • @Jim:可能想稍微修正一下您关于不良数据的部分。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多