我正在开发一个计算分子量的应用程序,我需要将一个字符串分成不同的分子。我一直在使用正则表达式来执行此操作,但我还没有完全使用它。 我需要正则表达式来匹配像 H2OCl4 和 Na2H2O 这样的模式,它将把它分解成像这样的匹配:
- H2
- 哦
- Cl4
- Na2
- H2
- 哦
我一直在研究的正则表达式是这样的:
([A-Z]\d*|[A-Z]*[a-z]\d*)
它真的很接近,但它目前将比赛分成这样:
- H2
- 哦
- C
- l4
我需要将 Cl4 视为一场比赛。任何人都可以帮助我解决我在此遗漏的最后一部分。我对正则表达式很陌生。谢谢。
最佳答案
我想你想要的是[A-Z][a-z]?\d*"
即,一个大写字母,后跟一个可选的小写字母,再后跟一个可选的数字串。
如果你想匹配0、1或2个小写字母,那么你可以这样写:
[A-Z][a-z]{0,2}\d*"
但是请注意,这两个正则表达式都假定输入数据是有效的。给定坏数据,它将跳过坏数据。例如,如果输入字符串是“H2ClxxzSO4”,您将得到:
- H2
- Clx
- S
- O4
如果您想检测坏数据,您需要检查返回的 Match
对象的 Index
属性以确保它等于起始索引。
关于c# - 匹配大写字母、数字或大写、小写和数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902704/