0

我正在努力使用 python 正则表达式来获得正确的输出。

我有这样的字符串文件:

80H236M7I106M2885H

除了整数字符串可以包含:IDMSH

我正在尝试锻炼字符串中某些部分的起始端(S 和 H 的部分。这些部分始终位于字符串的开头、结尾或两端),我的示例字符串的正确输出为:

0 80 80H236M7I106M2885H
429 3314 80H236M7I106M2885H

(基本上我们将所有数字相加,直到遇到另一个块,我们正在搜索,结束,然后我们设置新的开始,结束)(顺便说一句,知道该部分是在字符串的开头还是结尾也很高兴) 例如:

0 80 80H236M7I106M2885H start
429 3314 80H236M7I106M2885H end

我使用了这样的代码:

insstart = 0
insend = 0
for num1, i_or_d in re.findall('(\d+)([HISDM])', pcigar):
    if i_or_d in 'S':
        insstart == insstart
        insend += int(num1)
    elif i_or_d in 'H':
        insstart == insstart
        insend += int(num1)
    elif i_or_d in 'M':
        insstart += int(num1)
        insend += int(num1)
    elif i_or_d in 'I':
        insstart += int(num1)
        insend += int(num1)

    if i_or_d in 'H' or i_or_d in 'S':

        print insstart,insend,pcigar

我不在乎 D,因为在我的文件中它不存在。但是,如果以某种方式存在,则不应更改 insstart、insend (==)

但是它输出:

0 80 80H236M7I106M2885H
349 3314 80H236M7I106M2885H

谁能帮我得到正确的输出?干杯,艾瑞克

4

1 回答 1

1
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

pcigar = "80H236M7I106M2885H"

insstart = 0
insend = 0
temp = 0

for num1, i_or_d in re.findall('(\d+)([HISDM])', pcigar):
    if i_or_d in 'S':
        insstart = insstart + temp
        insend += int(num1)
        temp += insend
    elif i_or_d in 'H':
        insstart = insstart + temp
        insend += int(num1)
        temp += insend
    elif i_or_d in 'M':
        insstart += int(num1)
        insend += int(num1)
    elif i_or_d in 'I':
        insstart += int(num1)
        insend += int(num1)

    if i_or_d in 'H' or i_or_d in 'S':

        print insstart, insend, pcigar
于 2013-09-17T14:09:06.310 回答