使用正则表达式隔离字母后面的第一个数字

时间:2013-08-10 17:59:43

标签: python regex chemistry

我正在尝试以C7H19N3

格式解析以unicode方式提供给我的化学式

我希望隔离字母后面的第一个数字的位置,即7位于索引1而1位于索引3处。这是我要插入“sub”的前面数字

我的第一次尝试让我循环,虽然试图孤立第一个数字的位置,但无济于事。

我认为正则表达式可以实现这一点,尽管我很遗憾。

我的最终目标是输出公式Csub7Hsub19Nsub3,以便我的文本编辑器可以正确格式化它。

3 个答案:

答案 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')。