Skip to content

Dividere le stringhe in Python (delimitatore, interruzione di riga, regex, ecc.)

Python

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
  • 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