给定一个字符串如何找到 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:])]
给定一个字符串:
? ^^^^ ^^^ --
如何找到第一个字符后所有子串的开始和结束索引?
预期输出:(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:])]