【问题标题】:Given a string how to find start and end index of all non-whitespace substrings in python给定一个字符串如何在python中查找所有非空白子字符串的开始和结束索引
【发布时间】:2020-09-18 01:03:15
【问题描述】:

给定一个字符串:

?           ^^^^    ^^^  --

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

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

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

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

【问题讨论】:

  • 大概“子串”实际上是指“一个或多个相邻非空格字符的序列”?
  • 是的@JohnGordon,这将是一种更恰当的表达方式
  • 在这里使用正则表达式可能是最简单的,特别是因为您也需要开始和结束索引。类似于re.findall('\S+', string[1:])
  • 使用正则表达式 \S+re.finditer() 然后 matchObj.span()

标签: python string substring


【解决方案1】:

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

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

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

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

如果第一个子字符串可以紧跟在? 之后,则需要先对字符串进行切片,然后在开始索引上加 1,而不是从结束索引中减去,以调整丢失的第一个字符。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 2021-04-19
    • 1970-01-01
    • 2018-02-28
    • 2015-12-31
    • 2019-03-29
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多