我有两个问题:
1)我有一个正则表达式([A-Z][a-z]{0,2})(\d*)
我正在使用Python的re.finditer()
匹配适当的字符串。我的问题是,我只想匹配不包含额外字符的字符串,否则我想引发异常。
我想捕捉以下模式:
- 大写字母,后跟 0、1 或 2 个小写字母,后跟 0 个或多个数字。
该模式代表一个化学式,即原子后跟它出现的次数。我想将原子及其出现次数放入字典中,因此我需要将原子(大写字母后跟 0、1 或 2 个小写字母)和数字分开,但请记住它们属于在一起。
Example:
C6H5Fe2I # this string should be matched successfully. Result: C6 H5 Fe2 I
H2TeO4 # this string should be matched successfully Result: H2 Te O4
H3PoooO5 # exception should be raised
C2tH6 # exception should be raised
2)第二个问题是,如果输入字符串错误,我应该引发什么样的异常。
谢谢你,托马斯
您可以使用以下几种不同的方法:
比较长度
- 求原始字符串的长度。
- 对匹配字符串的长度求和。
- 如果两个数字不同,则表明存在未使用的字符。
请注意,如果您想避免两次解析字符串,您还可以将此方法与现有代码结合使用,而不是将其作为额外的步骤。
整个字符串的正则表达式
您可以检查此正则表达式是否匹配整个字符串:
^([A-Z][a-z]{0,2}\d*)*$
(圆形) http://rubular.com/r/lqX10VSmeo
Tokenize
您可以使用以下正则表达式来标记原始字符串:
[A-Z][^A-Z]*
然后检查每个标记,看看它是否与您的原始正则表达式匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)