我有两个问题:
1) 我有一个正则表达式 ([A-Z][a-z]{0,2})(\d*) 我正在使用 Python 的 re.finditer() 来匹配合适的字符串。我的问题是,我只想匹配不包含额外字符的字符串,否则我想引发异常。
我想捕捉以下模式: - 大写字母,后跟 0、1 或 2 个小写字母,后跟 0 个或更多数字。
该模式代表一个化学式,即原子后跟它出现的次数。我想将原子与它的出现次数放入字典中,因此我需要将原子(大写字母后跟 0、1 或 2 个小写字母)和数字分开,但请记住它们属于一起。
例子:
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*)*$
标记化
您可以使用以下正则表达式对原始字符串进行分词:
[A-Z][^A-Z]*
然后检查每个标记以查看它是否与您的原始正则表达式匹配。
