Eliminare caratteri da stringa- Python

Tommaso Sala

Utente Attivo
868
140
CPU
Ryzen 3 1200
Dissipatore
Stock
Scheda Madre
A320m-k
HDD
SSD 240GB + HDD 2x500GB
RAM
8gb DDR4
PSU
EVGA 500w
Data la stringa b'141\r\n' come faccio ad ottenere solo 141? posso facilmente togliere b' così
Codice:
stringa = stringa[2:]
ma la parte finale? Considerate che 141 è solo un esempio, potrebbe essere a due o a quattro cifre anche per cui non posso cavermela con [:3]!
 

Giacomo Furlan

Utente Attivo
351
87
CPU
AMD Ryzen 5900x
Dissipatore
BeQuiet! SilentLoop 2 360mm
Scheda Madre
Gigabyte X470 AORUS Gaming 7 WIFI AMD X470
HDD
Crucial P5 Plus 2 TB PCIe M.2 2280SS
RAM
Patriot Viper Steel RAM DDR4 3600 Mhz 64GB (2x32GB) C18
GPU
MSI GeForce RTX 2080 Gaming X Trio
Audio
SteelSeries Arctis 9
Monitor
Alienware AW3423DWF
PSU
EVGA SuperNOVA 650 G3, 80 Plus GOLD 650W
Case
Sharkoon TG5
OS
Windows 11, Fedora 36

Andretti60

Utente Èlite
6,440
5,091
Un po’ difficile risponderti se non specifichi le regole di estrazione. Cosa distingue la stringa "141" dal resto?
 

Tommaso Sala

Utente Attivo
868
140
CPU
Ryzen 3 1200
Dissipatore
Stock
Scheda Madre
A320m-k
HDD
SSD 240GB + HDD 2x500GB
RAM
8gb DDR4
PSU
EVGA 500w
Un po’ difficile risponderti se non specifichi le regole di estrazione. Cosa distingue la stringa "141" dal resto?
Temo di non aver capito la domanda. Quella stringa è frutto di serial.readlines() che uso per prendere i dati dal monitor seriale di arduino. Visto che a me serve poi sfruttare quel numero e lavorarci come intero mi serve innanzitutto isolarlo, o sbaglio

Inviato da SM-G361F tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Andretti60

Utente Èlite
6,440
5,091
È quello che avresti dovuto specificare dall'inizio.
Ora rispondi: la stringa inizia sempre con b', e finisce con \r\n ? Ti serve solo quello che c’è in mezzo?
 

Tommaso Sala

Utente Attivo
868
140
CPU
Ryzen 3 1200
Dissipatore
Stock
Scheda Madre
A320m-k
HDD
SSD 240GB + HDD 2x500GB
RAM
8gb DDR4
PSU
EVGA 500w
È quello che avresti dovuto specificare dall'inizio.
Ora rispondi: la stringa inizia sempre con b', e finisce con \r\n ? Ti serve solo quello che c’è in mezzo?
Esattamente, considera che la parte finale non riesco a toglierla nemmeno con stringa[:2]
Hai pensato ad usare una regex come la seguente?

Codice:
^b'(.*)'$

Spiegazione della regex: https://regex101.com/r/eQhmmG/1
Non riesco a capire cosa faccia e per quale fine...

Inviato da SM-G361F tramite App ufficiale di Tom\'s Hardware Italia Forum
 
Ultima modifica:

Andretti60

Utente Èlite
6,440
5,091
Scarti I primi due caratteri e gli ultimi quattro. Difficile sapere se il backslash in questo caso è un carattere o rappresenta un carattere speciale. Devi provare.
 

Giacomo Furlan

Utente Attivo
351
87
CPU
AMD Ryzen 5900x
Dissipatore
BeQuiet! SilentLoop 2 360mm
Scheda Madre
Gigabyte X470 AORUS Gaming 7 WIFI AMD X470
HDD
Crucial P5 Plus 2 TB PCIe M.2 2280SS
RAM
Patriot Viper Steel RAM DDR4 3600 Mhz 64GB (2x32GB) C18
GPU
MSI GeForce RTX 2080 Gaming X Trio
Audio
SteelSeries Arctis 9
Monitor
Alienware AW3423DWF
PSU
EVGA SuperNOVA 650 G3, 80 Plus GOLD 650W
Case
Sharkoon TG5
OS
Windows 11, Fedora 36
Esattamente, considera che la parte finale non riesco a toglierla nemmeno con stringa[:2]

Non riesco a capire cosa faccia e per quale fine...

Inviato da SM-G361F tramite App ufficiale di Tom\'s Hardware Italia Forum

La regex ti permette di isolare un gruppo che puoi estrapolare in seguito. Se la stringa è composta sempre in questa maniera:

Codice:
b'NUMERO'\r\n

Ti basta allora una regex tipo:

Codice:
^b'(\d+)'

^: inizio della stringa
b': serie di caratteri b e ' (literal match)
(: inizio gruppo (1)
\d+: una o più occorrenze di caratteri numerici
): fine gruppo (1)
': carattere ' (literal match)

Python:
import re

result = re.search(r"^b'(\d+)'", "b'123'", re.IGNORECASE)
print(result.group(1))

Oppure fai come scritto da @Andretti60
 
  • Mi piace
Reazioni: Tommaso Sala

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
edit: ma il b' iniziale è parte della stringa o indica che il valore è binarystring?
Per intenderci, quale dei due seguenti è il tuo caso?
Codice:
stringa = b'141\r\n'
stringa = "b'141\r\n'"
edit2: immagino sia il secondo, allora non ho niente da aggiungere.
 
Ultima modifica:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili