我正在开发一种能够计算分子量的应用程序,我需要将一个字符串分成不同的分子。我一直在使用正则表达式来做这个,但我还没有完全开始工作。 我需要正则表达式来匹配像H2OCl4和Na2H2O这样的模式,它会将其分解为匹配:
我一直在研究的正则表达式是:
([A-Z]\d*|[A-Z]*[a-z]\d*)
它非常接近,但它目前将比赛分成了这个:
我需要将Cl4视为一场比赛。任何人都可以帮助我完成我在此遗漏的最后一部分。我对正则表达式很新。感谢。
答案 0 :(得分:9)
我认为你想要的是"[A-Z][a-z]?\d*"
即大写字母,后跟可选的小写字母,后跟可选的数字字符串。
如果你想匹配0,1或2个小写字母,那么你可以写:
"[A-Z][a-z]{0,2}\d*"
但请注意,这两个正则表达式都假定输入数据有效。鉴于数据不佳,它会跳过不良数据。例如,如果输入字符串是“H2ClxxzSO4”,那么您将获得:
如果要检测错误数据,则需要检查返回的Index
对象的Match
属性,以确保它等于起始索引。
答案 1 :(得分:0)
请注意,如果您希望在输入中使用国际字符,例如带有变音符号的字母(ñ,é,è,ê,ë等),则应使用相应的unicode category。在您的情况下,您想要的是@"\p{Lu}\p{Ll}?\d*"
。