我正在尝试解析以 unicode 格式提供给我的化学式C7H19N3
我希望隔离字母后第一个数字的位置,即7
在索引 1 处并且1
在索引 3 处。这是我想在数字前面插入“子”
我的第一次尝试让我循环尝试仅隔离第一个数字的位置,但无济于事。
我认为正则表达式可以做到这一点,虽然我很迷茫。
我的最终目标是输出公式Csub7Hsub19Nsub3
,以便我的文本编辑器可以正确格式化它。
这个怎么样?
>>> re.sub('(\d+)', 'sub\g<1>', "C7H19N3")
'Csub7Hsub19Nsub3'
(\d+)
是匹配 1 个或多个数字的捕获组。\g<1>
是在替代字符串中引用已保存组的一种方式。
像这样的前瞻和后视:
>>> strs = 'C7H19N3'
>>> re.sub(r'(?<!\d)(?=\d)','sub',strs)
'Csub7Hsub19Nsub3'
这匹配字符串中的以下位置:
C^7H^19N^3 # ^ represents the positions matched by the regex.
这是一个与字母后的第一个数字字面匹配的数字:
>>> re.sub(r'([A-Z])(\d)', r'\1sub\2', "C7H19N3")
'Csub7Hsub19Nsub3'
它在功能上是等效的,但可能更能表达意图?\1
是 的较短版本\g<1>
,我还使用了原始字符串文字(r'\1sub\2'
而不是'\1sub\2'
)。