2017-01-19 41 views
5

Ten program, który piszę, otrzymuje ciąg o różnym rozmiarze i z różną liczbą nawiasów, które mieszczą się w różnych rozmiarach znaków.
np: wysextplwqpvipxdv [srzvtwbfzqtspxnethm] syqbzgtboxxzpwr
Chcę móc pokroić ten ciąg do listy zawierającej ciągi wszystkich części, które nie są w nawiasach. np:Krojenie w Pythonie - wszystko poza tym, co jest w nawiasach

list[0] = wysextplwqpvipxdv 
list[1] =syqbzgtboxxzpwr  

Znam string.slice i czytałem to: Explain Python's slice notation
Jednak mam problemy z myślenia, w jaki sposób umieścić to w kodzie.
Wyzwanie polegające na tym, że nie wiadomo, ile nawiasów, a mimo to można przeciąć ciąg znaków na liście.

+1

Nie sądzę, że krojenie jest tym, czego chcesz. Zajrzałbym do wyrażeń regularnych za pomocą pakietu 're'. – Mikk

+3

Czy kiedykolwiek będą nawiasy zagnieżdżone? –

Odpowiedz

11

użycie re.split na swoim nawiasach (non-chciwy) regex:

import re 

s = "wysextplwqpvipxdv[srzvtwbfzqtspxnethm]syqbzgtboxxzpwr" 

toks = re.split("\[.*?\]",s) 

print(toks) 

wynik:

['wysextplwqpvipxdv', 'syqbzgtboxxzpwr'] 

ostrzeżenie: to nie zadziała, jeżeli wsporniki są zagnieżdżone. W takim przypadku musisz użyć bardziej złożonego analizatora składni, takiego jak pyparsing.

EDYCJA: w takim przypadku zarządzanie zagnieżdżaniem możliwe z wyrażeniem regularnym, ponieważ uwzględniamy tylko poziom poza nawiasami. Jedna z nowych odpowiedzi regex to get all text outside of brackets to robi.

+1

Dzięki człowieku! Pomogłeś mi. Nie wiedziałem o re biblioteki. Pójdę i zbadam to teraz –