
Questo articolo descrive come dividere le stringhe in base a delimitatori, interruzioni di riga, espressioni regolari e numero di caratteri in Python.
- Dividi per delimitatore:
split()
- Specificare il delimitatore:
sep
- Specificare il numero massimo di divisioni:
maxsplit
- Specificare il delimitatore:
- Dividi da destra per delimitatore:
rsplit()
- Dividi per interruzione di riga:
splitlines()
- Divisione per espressione regolare:
re.split()
- Diviso da più delimitatori diversi
- Concatena un elenco di stringhe
- Dividi in base al numero di caratteri: fetta
Vedere l’articolo seguente per ulteriori informazioni su come concatenare ed estrarre stringhe.
Dividi per delimitatore:split()
Usa il metodo split() per dividere per delimitatore.
Se l’argomento viene omesso, verrà diviso da spazi bianchi, come spazi, newline ne tabulazioni t. Gli spazi bianchi consecutivi vengono elaborati insieme.
Viene restituito un elenco delle parole.
s_blank = 'one two threenfourtfive'
print(s_blank)
# one two three
# four five
print(s_blank.split())
# ['one', 'two', 'three', 'four', 'five']
print(type(s_blank.split()))
# <class 'list'>
Utilizzare join(), di seguito, per concatenare un elenco in stringa.
Specificare il delimitatore:sep
Specificare un delimitatore per il primo parametro sep.
s_comma = 'one,two,three,four,five'
print(s_comma.split(','))
# ['one', 'two', 'three', 'four', 'five']
print(s_comma.split('three'))
# ['one,two,', ',four,five']
Se vuoi specificare più delimitatori, usa le regolari espressioni come descritto più avanti.
Specificare il numero massimo di divisioni:maxsplit
Specificare il numero massimo di divisioni per il secondo numero di maxsplit.
Se viene fornito maxsplit, al massimo, le divisioni maxsplit vengono eseguite.
print(s_comma.split(',', 2))
# ['one', 'two', 'three,four,five']
Ad esempio, è utile eliminare la prima riga da una stringa.
Se sep=’n’, maxsplit=1, puoi ottenere un elenco di stringhe divise per il primo carattere di nuova riga n. Il secondo elemento [1] di questo elenco è una stringa che esclude la prima riga. Poiché è l’ultimo elemento, può essere specificato come [-1].
s_lines = 'onentwonthreenfour'
print(s_lines)
# one
# two
# three
# four
print(s_lines.split('n', 1))
# ['one', 'twonthreenfour']
print(s_lines.split('n', 1)[0])
# one
print(s_lines.split('n', 1)[1])
# two
# three
# four
print(s_lines.split('n', 1)[-1])
# two
# three
# four
Allo stesso modo, per eliminare le prime due righe:
print(s_lines.split('n', 2)[-1])
# three
# four
Dividi da destra per delimitatore:rsplit()
rsplit() si divide a destra della stringa.
Il risultato è diverso da split() solo quando viene fornito il secondo parametro maxsplit.
Allo stesso modo di split(), se vuoi eliminare l’ultima riga, usa rsplit().
print(s_lines.rsplit('n', 1))
# ['onentwonthree', 'four']
print(s_lines.rsplit('n', 1)[0])
# one
# two
# three
print(s_lines.rsplit('n', 1)[1])
# four
Per eliminare le ultime due righe:
print(s_lines.rsplit('n', 2)[0])
# one
# two
Dividi per interruzione di riga:splitlines()
C’è anche uno splitlines() per dividere in base ai confini delle linee.
Come negli esempi precedenti, split() e rsplit() si dividono per consentito con spazi bianchi che includono l’interruzione di riga, e puoi anche specificare l’interruzione di riga con il sep.
Tuttavia, è spesso meglio usare splitlines().
Ad esempio, dividere la stringa che contiene n (LF, utilizzatore nel sistema operativo Unix incluso Mac) e rn (CR + LF, utilizzatore nel sistema operativo Windows).
s_lines_multi = '1 onen2 tworn3 threen'
print(s_lines_multi)
# 1 one
# 2 two
# 3 three
Quando viene applicato split(), per la funzione viene predefinita, viene diviso non solo per interruzioni di riga ma anche per spazi.
print(s_lines_multi.split())
# ['1', 'one', '2', 'two', '3', 'three']
Poiché è possibile specificare un solo carattere di nuova riga in sep, non può essere diviso se sono presenti caratteri di nuova riga misti. Viene anche diviso alla fine del carattere di nuova riga.
print(s_lines_multi.split('n'))
# ['1 one', '2 twor', '3 three', '']
splitlines() si divide in vari caratteri di nuova riga ma non in altri spazi bianchi.
print(s_lines_multi.splitlines())
# ['1 one', '2 two', '3 three']
Se il primo argomento, keepends, è impostato su True, il risultato include un carattere di nuova riga alla fine della riga.
print(s_lines_multi.splitlines(True))
# ['1 onen', '2 tworn', '3 threen']
Vedere l’articolo seguente per altre operazioni con interruzioni di riga.
Divisione per espressione regolare:re.split()
split() e rsplit() si dividono solo quando sep corrisponde completamente.
Se vuoi dividere una stringa che corrisponde a un’espressione regolare (regex) invece di una corrispondenza perfetta, usa split() del modulo re.
In re.sp(), specifica il modello ex nel primo parametro e la stringa di caratteri di destinazione nel secondo parametro.
Un esempio di divisione per numeri consecutivi è il seguente.
import re
s_nums = 'one1two22three333four'
print(re.split('d+', s_nums))
# ['one', 'two', 'three', 'four']
Il numero massimo di divisione può essere specificato nel terzo parametro, maxsplit.
print(re.split('d+', s_nums, 2))
# ['one', 'two', 'three333four']
Diviso da più delimitatori diversi
I due seguenti sono utili da ricordare anche se non hai familiarità con la regex.
Racchiudi una stringa con [] in qualsiasi modo che corrisponda a singolo carattere in esso contenuto. Puoi dividere la stringa per più caratteri diversi.
s_marks = 'one-two+three#four'
print(re.split('[-+#]', s_marks))
# ['one', 'two', 'three', 'four']
Se i modelli sono delimitati da |, corrispondono a qualsiasi modello. Naturalmente, è possibile utilizzare caratteri speciali di regex per ogni pattern, ma va bene anche se la stringa normale è specificata così com’è. Puoi dividere per più stringhe diverse.
s_strs = 'oneXXXtwoYYYthreeZZZfour'
print(re.split('XXX|YYY|ZZZ', s_strs))
# ['one', 'two', 'three', 'four']
Concatena un elenco di stringhe
Negli esempi precedenti, puoi dividere la stringa e ottenere l’elenco.
Se vuoi concatenare un elenco di stringhe in una stringa, usa il metodo string, join().
Chiama join() da ‘separator’ e passa un elenco di stringhe da concatenare all’argomento.
l = ['one', 'two', 'three']
print(','.join(l))
# one,two,three
print('n'.join(l))
# one
# two
# three
print(''.join(l))
# onetwothree
Vedere l’articolo seguente per i dettagli sulla concatenazione di stringhe.
Dividi in base al numero di caratteri: fetta
Usa la sezione per dividere le stringhe in base al numero di caratteri.
s = 'abcdefghij'
print(s[:5])
# abcde
print(s[5:])
# fghij
Può essere ottenuto rispettivamente come tupla o assegnato a una variabile.
s_tuple = s[:5], s[5:]
print(s_tuple)
# ('abcde', 'fghij')
print(type(s_tuple))
# <class 'tuple'>
s_first, s_last = s[:5], s[5:]
print(s_first)
# abcde
print(s_last)
# fghij
Dividi in tre:
s_first, s_second, s_last = s[:3], s[3:6], s[6:]
print(s_first)
# abc
print(s_second)
# def
print(s_last)
# ghij
Il numero di caratteri può essere ottenuto con la funzione incorporata len(). Può anche essere diviso a metà usando questo.
half = len(s) // 2
print(half)
# 5
s_first, s_last = s[:half], s[half:]
print(s_first)
# abcde
print(s_last)
# fghij
Se vuoi concatenare le stringhe, usa l’operatore +.
print(s_first + s_last)
# abcdefghij