#python #string #substring
#python #строка #подстрока
Вопрос:
Учитывая строку:
? ^^^^ ^^^ --
Как я могу найти начальный и конечный индексы всех подстрок после первого символа?
Ожидаемый результат: (12,15), (20,22), (25,26)
Я попробовал следующее, но это работает только для первой подстроки, а не для остальных:
string = '? ^^^^ ^^^ --'
index = len(string ) - len(string .lstrip())
Комментарии:
1. Предположительно, под «подстрокой» вы на самом деле подразумеваете «последовательность одного или нескольких смежных символов, не содержащих пробелов»?
2. да, @JohnGordon это был бы более подходящий способ выразить это
3. Использование регулярных выражений, вероятно, было бы проще всего здесь, тем более, что вам также нужны начальный и конечный индексы. Что-то вроде
re.findall('S ', string[1:])
.4. используйте регулярное выражение
S
,re.finditer()
а затемmatchObj.span()
Ответ №1:
Используйте регулярное выражение для сопоставления любой последовательности непробельных подстрок. Match
Объект содержит начальный и конечный индексы каждого совпадения.
import re
string = '? ^^^^ ^^^ --'
result = [(m.start(), m.end()-1) for m in re.finditer(r'S ', string)][1:]
[1:]
Удаляет совпадение ?
в начале.
Мне пришлось вычесть 1 из m.end()
, потому что он указывает на индекс после совпадения (так что использование начала и конца в качестве диапазона приведет к полному совпадению).
Если первая подстрока может быть сразу после ?
, вам нужно сначала разрезать строку, а затем добавить 1 к начальному индексу, а не вычитать из конечного индекса, чтобы скорректировать пропущенный первый символ.
result = [(m.start() 1, m.end()) for m in re.finditer(r'S ', string[1:])]