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

Given a string how to find start and end index of all non-whitespace substrings in python

给定一个字符串:

?           ^^^^    ^^^  --

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

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

我尝试了以下方法,但它只适用于第一个子字符串而不适用于其余部分:

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

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

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

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

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

如果第一个子字符串可以紧跟在?之后,则需要先对字符串进行切片,然后在开始索引处加1而不是在结束索引处减1,以调整缺少的第一个字符.

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