Mam wynik polecenia w formie tabelarycznej. Analizuję te dane wyjściowe z pliku wynikowego i przechowuję je w ciągu. Każdy element w jednym wierszu jest oddzielony jednym lub większą liczbą białych znaków, dlatego używam wyrażeń regularnych, aby dopasować 1 lub więcej spacji i podzielić go. Jednak pomiędzy każdym elementem wstawiana jest spacja:
>>> str1="a b c d" # spaces are irregular
>>> str1
'a b c d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!
Czy jest lepszy sposób na zrobienie tego?
Po każdym podziale str2
jest dołączany do listy.
'str2'
str1.split()
. Nie ma potrzeby stosowania wyrażenia regularnego.Odpowiedzi:
Używając
(
,)
przechwytujesz grupę, jeśli po prostu je usuniesz, nie będziesz miał tego problemu.Jednak nie ma potrzeby stosowania wyrażenia regularnego,
str.split
bez określonego separatora podzieli to za Ciebie spacjami. W tym przypadku byłby to najlepszy sposób.Jeśli naprawdę chciałeś wyrażenia regularnego, możesz użyć tego (
'\s'
reprezentuje białe znaki i jest jaśniejsze):lub możesz znaleźć wszystkie znaki inne niż białe znaki
źródło
str.split
jest zdecydowanie najlepszy: D['', 'a', 'b', 'c', 'de', '']
str1.split()
string.split()
jest opcją. Pytałem, czy można to zrobić również za pomocą regex?re.findall
opcji?str.split
Metoda automatycznie usunie wszystkie spacje między elementami:Dokumenty są tutaj: http://docs.python.org/library/stdtypes.html#str.split
źródło
str.split()
to prawdopodobnie najlepszy wybór do czegoś tak lekkiego jak to.Gdy używasz,
re.split
a wzór podziału zawiera grupy przechwytywania, grupy te są zachowywane w wyniku. Jeśli tego nie chcesz, użyj zamiast tego grupy nieprzechwytywanej.źródło
str.split
jest prawdopodobnie lepsze dla twojego przykładu. Chciałem tylko wyjaśnić, dlaczego zachowujesz się tak, jak robisz.Właściwie jest to bardzo proste. Spróbuj tego:
źródło
stringToSplit.split()