Обращение строки на основе пользовательского делиметра

#python #string

#python #строка

Вопрос:

У меня есть строка;

 txt = "Hello$JOHN$*How*Are*$You"
 

Я хочу, чтобы вывод выглядел так:

 Output: "You*$Are*How$*JOHN$Hello"
 

Если вы внимательно посмотрите, разделители символов ($ and *) НЕ меняются местами в их последовательности появления. Строка реверсируется по слову, но разделители сохраняются последовательно.

Я попробовал следующее:

 sep=['

Я не могу придумать логику для захвата последовательности разделителей и изменения слов строки.


Ответ №1:

Один из подходов с использованием регулярных выражений:

 import re

s = "Hello$JOHN$*How*Are*$You"

splits = re.split('([$*] )', s)
res = ''.join(reversed(splits))

print(res)
 

Вывод

 You*$Are*How$*JOHN$Hello
 

(Возможно, менее элегантное) решение (но более понятное) - использовать itertools.groupby:

 from itertools import groupby

s = "Hello$JOHN$*How*Are*$You"

splits = [''.join(g) for k, g in groupby(s, key=lambda x: x in ('

Идея здесь состоит в том, чтобы создать непрерывную последовательность символов-разделителей, не являющихся разделителями.



,'*']
txt_1 = ""

for ch in txt:
if ch in sep:
txt_1 = txt_1 ch
Я не могу придумать логику для захвата последовательности разделителей и изменения слов строки.

Ответ №1:

Один из подходов с использованием регулярных выражений:


Вывод


(Возможно, менее элегантное) решение (но более понятное) - использовать itertools.groupby:


Идея здесь состоит в том, чтобы создать непрерывную последовательность символов-разделителей, не являющихся разделителями.

, '*'))]
res = ''.join(reversed(splits))
print(res)

Идея здесь состоит в том, чтобы создать непрерывную последовательность символов-разделителей, не являющихся разделителями.

,‘*’]
txt_1 = «»

for ch in txt:
if ch in sep:
txt_1 = txt_1 ch

Я не могу придумать логику для захвата последовательности разделителей и изменения слов строки.

Ответ №1:

Один из подходов с использованием регулярных выражений:


Вывод


(Возможно, менее элегантное) решение (но более понятное) — использовать itertools.groupby:


Идея здесь состоит в том, чтобы создать непрерывную последовательность символов-разделителей, не являющихся разделителями.