2

我正在尝试解析以 unicode 格式提供给我的化学式C7H19N3

我希望隔离字母后第一个数字的位置,即7在索引 1 处并且1在索引 3 处。这是我想在数字前面插入“子”

我的第一次尝试让我循环尝试仅隔离第一个数字的位置,但无济于事。

我认为正则表达式可以做到这一点,虽然我很迷茫。

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

4

3 回答 3

5

这个怎么样?

>>> re.sub('(\d+)', 'sub\g<1>', "C7H19N3")
'Csub7Hsub19Nsub3'

(\d+)是匹配 1 个或多个数字的捕获组。\g<1>是在替代字符串中引用已保存组的一种方式。

于 2013-08-10T18:03:08.927 回答
2

像这样的前瞻和后视:

>>> strs = 'C7H19N3'
>>> re.sub(r'(?<!\d)(?=\d)','sub',strs)
'Csub7Hsub19Nsub3'

这匹配字符串中的以下位置:

C^7H^19N^3   # ^ represents the positions matched by the regex.
于 2013-08-10T18:06:12.530 回答
0

这是一个与字母后的第一个数字字面匹配的数字:

>>> re.sub(r'([A-Z])(\d)', r'\1sub\2', "C7H19N3")
'Csub7Hsub19Nsub3'

它在功能上是等效的,但可能更能表达意图?\1是 的较短版本\g<1>,我还使用了原始字符串文字(r'\1sub\2'而不是'\1sub\2')。

于 2013-08-10T18:25:15.033 回答