给出一个字符串:
? ^^^^ ^^^ --
如何找到第一个字符之后所有子字符串的开始和结束索引?
预期输出:(12,15), (20,22), (25,26)
我尝试了以下操作,但它仅适用于第一个子字符串,而不适用于其余子字符串:
string = '? ^^^^ ^^^ --'
index = len(string ) - len(string .lstrip())
答案 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:])]