Jak mogę uzyskać ciąg znaków po określonym podciągu?
Na przykład, chcę uzyskać ciąg po "world"
wmy_string="hello python world , i'm a beginner "
Najłatwiejszym sposobem jest prawdopodobnie podzielenie na słowo docelowe
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
split bierze słowo (lub znak) do podziału i opcjonalnie ogranicza liczbę podziałów.
W tym przykładzie podzielono na „świat” i ograniczono go tylko do jednego podziału.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(lub...[2]
) jest szybszy.Jeśli chcemy mieć do czynienia z przypadkiem, gdy
s2
to nie występuje ws1
, a następnie użyćs1.find(s2)
jako przeciwnyindex
. Jeśli zwracana jest wartość tego połączenia-1
,s2
to nie ma gos1
.źródło
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Dziwię się, że nikt nie wspomniał
partition
.IMHO, to rozwiązanie jest bardziej czytelne niż @ arshajii. Poza tym uważam, że @ arshajii's jest najlepszy, ponieważ jest najszybszy - nie tworzy niepotrzebnych kopii / podciągów.
źródło
str.split(..., 1)
.Chcesz użyć
str.partition()
:ponieważ ta opcja jest szybsza niż alternatywy .
Zauważ, że tworzy to pusty ciąg, jeśli brakuje separatora:
Jeśli chcesz mieć oryginalny ciąg znaków, sprawdź, czy druga wartość została zwrócona
str.partition()
nie jest pusta:Możesz także użyć
str.split()
z limitem 1:Ta opcja jest jednak wolniejsza . W najlepszym przypadku
str.partition()
jest to około 15% szybsze w porównaniu dostr.split()
:Pokazuje czasy na wykonanie z wejściami w tym przypadku brak separatora (scenariusz najgorszego przypadku), umieszczany jako pierwszy (scenariusz najlepszego przypadku) lub w dolnej połowie, górnej połowie lub ostatniej pozycji. Najszybszy czas jest oznaczony
[...]
i<...>
oznacza najgorszy.Powyższa tabela została opracowana na podstawie kompleksowej próby czasowej dla wszystkich trzech opcji przedstawionych poniżej. Testy przeprowadziłem na Pythonie 3.7.4 na 15-calowym MacBooku Pro z 2017 roku z procesorem Intel Core i7 2,9 GHz i 16 GB pamięci RAM.
Ten skrypt generuje losowe zdania z obecnym losowo wybranym ogranicznikiem i bez niego, a jeśli jest obecny, w różnych pozycjach w generowanym zdaniu, uruchamia testy w losowej kolejności z powtórzeniami (tworząc najodpowiedniejsze wyniki uwzględniające losowe zdarzenia systemu operacyjnego zachodzące podczas testowania), a następnie drukuje tabelę wyników:
źródło
Jeśli chcesz to zrobić za pomocą wyrażenia regularnego, możesz po prostu użyć grupy nie przechwytywania , aby uzyskać słowo „świat”, a następnie pobrać wszystko później, tak
Przykładowy ciąg jest testowany tutaj
źródło
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Możesz użyć tego pakietu o nazwie „substring”. Po prostu wpisz „substr install pip”. Podciąg można uzyskać, po prostu wspominając początkowe i końcowe znaki / indeksy.
Na przykład:
Wynik:
s = defghijklmn
źródło
To stare pytanie, ale stanąłem przed tym samym scenariuszem. Muszę podzielić ciąg znaków, używając jako demilitera słowa „niski”. Problem polegał na tym, że mam ten sam ciąg słowa poniżej i poniżej.
Rozwiązałem go za pomocą modułu re w ten sposób
użyj re.split z wyrażeniem regularnym, aby dopasować dokładne słowo
ogólny kod to:
Mam nadzieję, że to może komuś pomóc!
źródło
string.partition(" low ")[2]
:? (Zwróć uwagę na spacje po obu stronachlow
Wypróbuj to ogólne podejście:
źródło
W Pythonie 3.9
removeprefix
dodaje się nową metodę:źródło