给定一个字符串,如何在python中查找所有非空白子字符串的开始和结束索引

时间:2020-09-18 01:03:15

标签: python string substring

给出一个字符串:

?           ^^^^    ^^^  --

如何找到第一个字符之后所有子字符串的开始和结束索引?

预期输出:(12,15), (20,22), (25,26)

我尝试了以下操作,但它仅适用于第一个子字符串,而不适用于其余子字符串:

string = '?           ^^^^    ^^^  --'
index = len(string ) - len(string .lstrip())

1 个答案:

答案 0 :(得分:3)

使用正则表达式匹配任何非空白序列。 Match对象包含每个匹配项的开始和结束索引。

import re
string = '?           ^^^^    ^^^  --'
result = [(m.start(), m.end()-1) for m in re.finditer(r'\S+', string)][1:]

[1:]从开头删除?的匹配项。

我必须从m.end()中减去1,因为它指向匹配之后 的索引(以便使用开始和结束作为范围将得到整个匹配)。

如果第一个子字符串可以紧接在?之后,则需要先对字符串进行切片,然后将1添加到开始索引中而不是从结束索引中减去,以适应丢失的第一个字符。 / p>

result = [(m.start()+1, m.end()) for m in re.finditer(r'\S+', string[1:])]