如何在 python 中找到 space 之后的字符索引

How to find index of a character after space in python

如何拆分下面的行。

示例:

"DHCP discover messages  :   20     DNS Requests  :   20"  

我希望输出为

['DHCP discover messages', '20', 'DNS Requests', '20' ]

使用正则表达式的简短示例。

print([
    (l.strip(), v.strip())
    for l, v in re.findall(
        "(?P<label>[^:]+):(?P<value>[ 0-9]+)",
        example
    )
])
[('DHCP discover messages', '20'), ('DNS Requests', '20')]

你可以这样做:

import re

str = 'DHCP discover messages  :   20     DNS Requests  :   20'

[l.strip() for l in re.sub(r'(\d+) +(\w)', r':', str).split(':')]

#['DHCP discover messages', '20', 'DNS Requests', '20']
import re
x="DHCP discover messages  :   20     DNS Requests  :   20"
print [i for i in re.split(r"\s*:\s*\b(\d+\b)\s*",x) if i]

输出:['DHCP discover messages', '20', 'DNS Requests', '20']

如果整行由几个文本:数字对组成,首先应该在每个冒号上进行拆分。

那么除了第一个和最后一个部分之外的所有部分都应该在第一个空格处分割。

示例输入字符串:

"t 1 : n1   t t 2 : n2   t t t 3 : n3"

第一个split(':')之后:

["t 1 ", " n1   t t 2 ", " n2   t t t 3 ", " n3"]

在除第一个和最后一个元素之外的所有元素上 split(None, 1) 之后:

["t 1 ", ["n1",  "t t 2 "], ["n2", "t t t 3 "], " n3"]

最后展平列表和trim任何额外的空格:

["t 1", "n1",  "t t 2", "n2", "t t t 3", "n3"]

编辑:代码示例:

def mysplit(line):
    split1 = line.split(':')
    last = len(split1) - 1 
    for i, t1 in enumerate(split1):
        if i == 0 or i == last:
            yield t1.strip()
        else:
            for t2 in t1.split(None, 1): 
                yield t2.strip()

testline = "t 1 : n1   t t 2 : n2   t t t 3 : n3" 
testsplit = list(mysplit(testline))
print(testsplit)
# prints ['t 1', 'n1', 't t 2', 'n2', 't t t 3', 'n3']