Chcę zastąpić spacje po dwóch słowach w ciągu tekstowym. Powiedzmy, że zastępujemy symbol @. Przykłady: Wejście: to jest przykładowy tekst Wyjście: to jest@przykład@ tekst Wejście: czy możemy ...

0
nOObda 27 czerwiec 2021, 20:24

4 odpowiedzi

Najlepsza odpowiedź

str.replace zastępuje wszystkie wystąpienia, jeśli liczba nie jest podana i jest niezależna od pozycji, zaczyna się od pierwszego.

Zamiast tego możesz użyć przypisania plasterka:

text = "this is a sample text"
flag = 0     
for i in range(0, len(text)):
    if (text[i] == ' '):
        flag += 1
        if(flag%2 == 0):
            text = text[:i] + '@' + text[i+1:]
print(text)
this is@a sample@text

UWAGA: ciągi znaków są niezmienne w Pythonie. Więc za każdym razem, gdy robisz text = text[:i] + '@' + text[i+1:], tworzysz zupełnie nową listę. Wydajnym sposobem jest przekonwertowanie tekstu na text_list = list(text), a następnie wykonanie operacji poprzez zmianę elementu listy w indeksie i.

4
Epsi95 27 czerwiec 2021, 17:40

Split i dołącz

words = "this is a sample text".split()
out = ''.join(f'{w} ' if i%2 == 0 else f'{w}@' for i, w in enumerate(words))
out = out.strip('@') if len(words) % 2 == 0 else out.strip(' ')

Wynik

this is@a sample@text
2
Vishnudev 27 czerwiec 2021, 17:49

Podziel tekst na słowa, utwórz iterator słów i uzyskaj ciągi n słów, połącz wszystkie grupy za pomocą "@":

def seperate_n(text, n, char="@"):

    def get_chunks():
        from itertools import islice
        words = iter(text.split())

        while chunk := " ".join(islice(words, n)):
            yield chunk

    return char.join(get_chunks())

print(seperate_n("this is a sample text", 2))

Wynik:

this is@a sample@text
>>> 
1
Paul M. 27 czerwiec 2021, 17:35

Aby dodać moje dwa centy, użycie regex mogłoby być bardziej czytelne:

import re

text = "this is a sample text"
text = re.sub(r"( [^ ]*) ", r"\1@", text)
print(text)
1
Kryštof Vosyka 27 czerwiec 2021, 18:02