我正在尝试以C7H19N3
我希望隔离字母后面的第一个数字的位置,即7
位于索引1而1
位于索引3处。这是我要插入“sub”的前面数字
我的第一次尝试让我循环,虽然试图孤立第一个数字的位置,但无济于事。
我认为正则表达式可以实现这一点,尽管我很遗憾。
我的最终目标是输出公式Csub7Hsub19Nsub3
,以便我的文本编辑器可以正确格式化它。
答案 0 :(得分:5)
这个怎么样?
>>> re.sub('(\d+)', 'sub\g<1>', "C7H19N3")
'Csub7Hsub19Nsub3'
(\d+)
是capturing group,匹配1位或更多位数。 \g<1>
是一种在替代字符串中引用已保存组的方法。
答案 1 :(得分:2)
这样的东西有前瞻和外观:
>>> strs = 'C7H19N3'
>>> re.sub(r'(?<!\d)(?=\d)','sub',strs)
'Csub7Hsub19Nsub3'
这匹配字符串中的以下位置:
C^7H^19N^3 # ^ represents the positions matched by the regex.
答案 2 :(得分:0)
这是一个字母与字母后面的第一个数字匹配的字符:
>>> re.sub(r'([A-Z])(\d)', r'\1sub\2', "C7H19N3")
'Csub7Hsub19Nsub3'
它在功能上是等同的,但可能更具表现力? \1
是\g<1>
的缩写版本,我还使用了原始字符串文字(r'\1sub\2'
而不是'\1sub\2'
)。