# Πώς να αφαιρέσετε ένα χαρακτήρα από μια συμβολοσειρά στην Python

Αν και οι συμβολοσειρές είναι **αμετάβλητες** στην Python, μπορείτε να δημιουργήσετε νέες συμβολοσειρές με βάση τις υπάρχουσες. Χρησιμοποιώντας διαφορετικές μεθόδους, μπορείτε να αφαιρέσετε ή να αντικαταστήσετε χαρακτήρες για να δημιουργήσετε τη συμβολοσειρά που θέλετε.

## Τι σημαίνει αμεταβλητότητα;

Η αμεταβλητότητα σημαίνει ότι μόλις δημιουργηθεί ένα αντικείμενο, δεν μπορεί πλέον να αλλάξει. Στην Python, **οι συμβολοσειρές είναι αμετάβλητες**. Όταν αφαιρείτε χαρακτήρες από μια συμβολοσειρά χρησιμοποιώντας μεθόδους στην Python, ουσιαστικά δημιουργείτε μια νέα συμβολοσειρά με συγκεκριμένα στοιχεία της αρχικής. Η αρχική συμβολοσειρά παραμένει όμως αμετάβλητη. Η αμεταβλητότητα των συμβολοσειρών βοηθά στην αποτελεσματική διαχείριση της μνήμης και αποτρέπει απρόσμενα αποτελέσματα κατά τον χειρισμό συμβολοσειρών.

## Πώς να αφαιρέσετε και να αντικαταστήσετε μεμονωμένους χαρακτήρες ή ένα σύνολο χαρακτήρων

Για να αφαιρέσετε συγκεκριμένους χαρακτήρες από μια συμβολοσειρά, μπορείτε να χρησιμοποιήσετε `str.replace()` ή `re.sub()` με μια **κανονική έκφραση** που αντιπροσωπεύει τους χαρακτήρες ή τα μοτίβα που θέλετε να αφαιρέσετε.

### `str.replace()`

Η συνάρτηση `str.replace()` χρησιμοποιείται για την αφαίρεση τμημάτων ενός κειμένου και την αντικατάστασή τους με ένα υποστρώμα.

```Python
original_string = "Hello, Python#"
 
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, Python!
```

Στο παραπάνω παράδειγμα, η μέθοδος `replace()` αντικαθιστά τον χαρακτήρα «#» στο `original_string` με ένα θαυμαστικό «!».

### `re.sub()`

Η συνάρτηση `re.sub()` ανήκει στο **module re** της Python. Με αυτή τη συνάρτηση, μπορείτε να αναζητήσετε κανονικές εκφράσεις σε συμβολοσειρές και να τις αντικαταστήσετε με άλλους χαρακτήρες.

```Python
import re
original_string = "Hello, World! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string)  # Output: Hello, World! @#$%^&*
print(modified_string)  # Output: Hello, World!
```

Το μοτίβο `[@#$%^&*]` είναι μια κανονική έκφραση που ταιριάζει με τους ειδικούς χαρακτήρες `@, #, $, %, ^, &,*`. Η συνάρτηση `re.sub()` αναζητά **όλες τις αντιστοιχίες του μοτίβου** στην αρχική συμβολοσειρά `original_string` και τις αντικαθιστά με μια κενή συμβολοσειρά `''`. Στο παραπάνω παράδειγμα, αποθηκεύσαμε το αποτέλεσμα στη μεταβλητή `modified_string` και το εμφανίσαμε.

## Πώς να αφαιρέσετε όλους τους χαρακτήρες εκτός από τα γράμματα

Μπορείτε να χρησιμοποιήσετε διάφορες μεθόδους για να αφαιρέσετε όλα τα γράμματα από μια συμβολοσειρά. Παρακάτω θα δούμε πώς να το κάνετε αυτό με τις ακόλουθες μεθόδους: `isalpha()`, `filter()` και `re.sub()`.

### `re.sub()`

```Python
import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorld
```

Η κανονική έκφραση `[^a-zA-Z]` ταιριάζει με οποιονδήποτε χαρακτήρα που δεν είναι μικρό ή κεφαλαίο γράμμα. Ως αποτέλεσμα, `modified_string` αποτελείται μόνο από τα γράμματα της αρχικής συμβολοσειράς. Λάβετε υπόψη ότι αυτό αφαιρεί επίσης τα κενά μεταξύ των γραμμάτων.

### `isalpha()`

```Python
original_string = "Hello, 123 World! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorld
```

Σε αυτό το παράδειγμα, χρησιμοποιήσαμε μια **λίστα κατανόησης** για να επαναλάβουμε κάθε γράμμα στο `original_string`. Η μέθοδος `isalpha()` ελέγχει αν ένας χαρακτήρας είναι γράμμα. Τα γράμματα στη συνέχεια εισάγονται σε ένα νέο `modified_string`, ενώ όλοι οι άλλοι χαρακτήρες αγνοούνται.

### `filter()`

```Python
original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorld
```

Η μέθοδος `str.isalpha()` επιστρέφει `True` αν ο χαρακτήρας είναι γράμμα, διαφορετικά επιστρέφει `False`. Η συνάρτηση `filter()` δημιουργεί ένα **αντικείμενο φίλτρου** που περιέχει μόνο τους χαρακτήρες που ικανοποιούν την `str.isalpha()` συνθήκη. Αυτό μας επιτρέπει να αφαιρέσουμε όλους τους χαρακτήρες στο `original_string` που δεν είναι γράμματα.

## Πώς να αφαιρέσετε όλους τους χαρακτήρες εκτός από τους αριθμούς

Όπως και στα προηγούμενα παραδείγματα, μπορείτε να διαχωρίσετε τους αριθμούς χρησιμοποιώντας `re.sub()`, `filter()` και το αριθμητικό ισοδύναμο του `isalpha()`, `isdigit()`.

### `re.sub()`

```Python
import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123
```

Με `0-9`, μπορούμε να ορίσουμε ένα εύρος που περιλαμβάνει όλους τους αριθμούς από το 0 έως το 9. Το παύλα `-` μεταξύ του 0 και του 9 λειτουργεί ως τελεστής εύρους. Το προηγούμενο `^` σημαίνει όλους τους χαρακτήρες που δεν βρίσκονται εντός του καθορισμένου εύρους από το 0 έως το 9. Αυτοί οι χαρακτήρες αντικαθίστανται από κενά χαρακτήρες χρησιμοποιώντας `re.sub`.

### `filter()`

```Python
original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isdigit, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123
```

Η συνάρτηση `filter()` σε συνδυασμό με `isdigit()` μπορεί να φιλτράρει αριθμούς από μια συμβολοσειρά και να αφαιρέσει τους υπόλοιπους χαρακτήρες. Χρησιμοποιώντας τις δύο αυτές συναρτήσεις μαζί, η νέα συμβολοσειρά μας δείχνει τους αριθμούς `123`.

### `isdigit()`

```Python
original_string = "Hello, 123 World"
modified_string = ''.join('*' if not char.isdigit() else char for char in original_string)
print(original_string) # Output: Hello, 123 World
print(modified_string) # Output: *******123******
```

Μπορούμε επίσης να χρησιμοποιήσουμε τη μέθοδο `isdigit()` σε μια λίστα κατανόησης για να επαναλάβουμε κάθε `char` στο `original_string`. Οι χαρακτήρες που δεν είναι δεκαδικά ψηφία (`not char.isdigit()` είναι αληθές) θα αντικατασταθούν με έναν αστερίσκο `*`, διαφορετικά παραμένουν οι ίδιοι.

## Πώς να αφαιρέσετε χαρακτήρες χρησιμοποιώντας `translate()`

Η μέθοδος `translate()` είναι μια ενσωματωμένη συνάρτηση της Python που χρησιμοποιείται για την προηγμένη αντικατάσταση και μετάφραση χαρακτήρων σε συμβολοσειρές. Παρέχει έναν αποτελεσματικό τρόπο αντικατάστασης χαρακτήρων χρησιμοποιώντας έναν πίνακα μεταφράσεων.

```Python
original_string = "Hello, World! Remove vowels."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string) # Output: Hello, World! Remove vowels.
print(modified_string) # Output: H*ll*, W*rld! R*m*v* v*w*ls.
```

Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τον κατασκευαστή `str.maketrans()` και `dict.fromkeys()` για να δημιουργήσουμε τον **πίνακα μετάφρασης**. Αυτό καθορίζει ότι όλα τα φωνήεντα πρέπει να αντικατασταθούν από `*`. Ο πίνακας εφαρμόζεται στη συνέχεια στην αρχική συμβολοσειρά για να ληφθεί `modified_string`.

Tip Κατά το φιλτράρισμα συμβολοσειρών, μπορείτε να χρησιμοποιήσετε τον δείκτη συμβολοσειράς Python για να φιλτράρετε χαρακτήρες σε συγκεκριμένες θέσεις. Για να μορφοποιήσετε συμβολοσειρές με συγκεκριμένο τρόπο, ανατρέξτε στο άρθρο μας σχετικά με τις μορφές συμβολοσειρών Python.


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/afairesi-charaktiron-apo-symboloseires-stin-python/](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/afairesi-charaktiron-apo-symboloseires-stin-python/) for AI/LLM consumption.