如何用正则匹配大写字母后接小写字母或单独大写字母?
解决正则匹配化学元素符号的问题
你需要调整正则表达式的匹配优先级,让引擎先匹配大写字母+小写字母的组合,再匹配单独的大写字母,这样就不会把类似Ni的元素拆分开。
可行的正则表达式及代码示例:
import re a = 'C57H38BN6Ni(1-,3)' result = re.findall('[A-Z][a-z]|[A-Z]', a) print(result) # 输出: ['C', 'H', 'B', 'N', 'Ni']
原理说明
[A-Z][a-z]:优先匹配所有大写字母后跟小写字母的组合(比如Ni)|:表示逻辑“或”[A-Z]:再匹配剩余的单独大写字母(比如C、H等)
正则引擎遵循最长匹配优先原则,遇到Ni这类组合时,会优先匹配[A-Z][a-z]模式,不会拆成单个字母匹配。你之前的写法要么把单个大写放在前面导致拆分,要么用了错误的正则语法(比如[[A-Z][a-z]]等价于[A-Za-z],会匹配单个小写字母),所以得到了不符合预期的结果。
内容的提问来源于stack exchange,提问作者Jabed A. Mohammed
相关产品推荐
相关产品推荐

