string — Κοινές λειτουργίες συμβολοσειρών¶
Πηγαίος κώδικας: Lib/string.py
Σταθερές συμβολοσειρών¶
Οι σταθερές που ορίζονται σε αυτό το module είναι:
- string.ascii_letters¶
Η συγχώνευση των σταθερών
ascii_lowercaseκαιascii_uppercaseπου περιγράφονται παρακάτω. Αυτή η τιμή δεν εξαρτάται από την τοποθεσία.
- string.ascii_lowercase¶
Τα πεζά γράμματα
'abcdefghijklmnopqrstuvwxyz'. Αυτή η τιμή δεν εξαρτάται από την τοποθεσία και δεν θα αλλάξει.
- string.ascii_uppercase¶
Τα κεφαλαία γράμματα
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. Αυτή η τιμή δεν εξαρτάται από την τοποθεσία και δεν θα αλλάξει.
- string.digits¶
Η συμβολοσειρά
'0123456789'.
- string.hexdigits¶
Η συμβολοσειρά
'0123456789abcdefABCDEF'.
- string.octdigits¶
Η συμβολοσειρά
'01234567'.
- string.punctuation¶
Η συμβολοσειρά των ASCII χαρακτήρων που θεωρούνται χαρακτήρες στίξης στην τοποθεσία
C:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
- string.printable¶
Η συμβολοσειρά των ASCII χαρακτήρων που θεωρούνται εκτυπώσιμοι από την Python. Αυτή είναι ένας συνδυασμός των
digits,ascii_letters,punctuationκαιwhitespace.Σημείωση
Σύμφωνα με το σχεδιασμό, το
string.printable.isprintable()επιστρέφειFalse. Ιδιαίτερα, τοstring.printableδεν είναι εκτυπώσιμο στην POSIX έννοια (βλ. LC_CTYPE).
- string.whitespace¶
Μια συμβολοσειρά που περιέχει όλους τους ASCII χαρακτήρες που θεωρούνται χαρακτήρες κενών. Αυτό περιλαμβάνει τους χαρακτήρες space, tab, linefeed, return, formfeed και vertical tab.
Custom string formatting¶
The built-in string class provides the ability to do complex variable
substitutions and value formatting via the format() method described in
PEP 3101. The Formatter class in the string module allows
you to create and customize your own string formatting behaviors using the same
implementation as the built-in format() method.
- class string.Formatter¶
Η κλάση
Formatterέχει τις εξής δημόσιες μεθόδους:- format(format_string, /, *args, **kwargs)¶
Η κύρια μέθοδος API. Δέχεται μια συμβολοσειρά μορφοποίησης και ένα αυθαίρετο σύνολο θέσεων και ονομάτων παραμέτρων. Είναι απλώς ένας wrapper που καλεί τη μέθοδο
vformat().Άλλαξε στην έκδοση 3.7: Μια παράμετρος συμβολοσειράς μορφοποίησης είναι τώρα μόνο-θέση.
- vformat(format_string, args, kwargs)¶
Αυτή η συνάρτηση κάνει όλη τη δουλειά της μορφοποίησης. Είναι εκτεθειμένη ως ξεχωριστή συνάρτηση για περιπτώσεις όπου θέλετε να περάσετε ένα προκαθορισμένο λεξικό παραμέτρων, αντί να αποσυμπιέσετε και να ξανασυμπιέσετε το λεξικό ως μεμονωμένες παραμέτρους χρησιμοποιώντας τη σύνταξη
*argsκαι**kwargs. Τοvformat()κάνει τη δουλειά της διάσπασης της συμβολοσειράς μορφοποίησης σε δεδομένα χαρακτήρων και πεδία αντικατάστασης. Καλεί τις διάφορες μεθόδους που περιγράφονται παρακάτω.
Επιπροσθέτως, η κλάση
Formatterορίζει έναν αριθμό μεθόδων που προορίζονται να αντικατασταθούν από υποκλάσεις:- parse(format_string)¶
Διατρέχει το format_string και επιστρέφει ένα iterable από πλειάδες (literal_text, field_name, format_spec, conversion). Αυτό χρησιμοποιείται από τη
vformat()για να σπάσει τη συμβολοσειρά σε κυριολεκτικό κείμενο ή πεδία αντικατάστασης.Οι τιμές στην πλειάδα αντιπροσωπεύουν εννοιολογικά μια έκταση κυριολεκτικού κειμένου ακολουθούμενη από ένα μόνο πεδίο αντικατάστασης. Εάν δεν υπάρχει κυριολεκτικό κείμενο (κάτι που μπορεί να συμβεί αν δύο πεδία αντικατάστασης εμφανίζονται διαδοχικά), τότε literal_text θα είναι μια συμβολοσειρά μηδενικού μήκους. Εάν δεν υπάρχει πεδίο αντικατάστασης, τότε οι τιμές των field_name, format_spec και conversion θα είναι
None. Η τιμή του field_name δεν τροποποιείται και η αυτόματη αρίθμηση των μη αριθμημένων πεδίων θέσης γίνεται από τηvformat().
- get_field(field_name, args, kwargs)¶
Δεδομένου του field_name, το μετατρέπει σε ένα αντικείμενο που θα μορφοποιηθεί. Η αυτόματη αρίθμηση του field_name που επιστρέφεται από την
parse()γίνεται από τηνvformat()πριν καλέσει αυτή τη μέθοδο. Επιστρέφει μια πλειάδα (obj, used_key). Η προεπιλεγμένη έκδοση δέχεται συμβολοσειρές της μορφής που ορίζεται στο PEP 3101, όπως «0[name]» ή «label.title». Τα args και kwargs είναι όπως περνούν στηvformat(). Η τιμή επιστροφής used_key έχει την ίδια σημασία με την παράμετρο key τηςget_value().
- get_value(key, args, kwargs)¶
Επιστρέφει μια δεδομένη τιμή πεδίου. Το όρισμα key θα είναι είτε ακέραιος είτε συμβολοσειρά. Εάν είναι ακέραιος, αντιπροσωπεύει το δείκτη της θέσης του ορίσματος στα args· εάν είναι συμβολοσειρά, τότε αντιπροσωπεύει ένα ορισμένο όρισμα σε kwargs.
Η παράμετρος args είναι η λίστα των θέσεων ορισμάτων για τη
vformat(), και η παράμετρος kwargs είναι το λεξικό των ορισμένων λέξεων-κλειδιών.Για σύνθετα ονόματα πεδίων, αυτές οι συναρτήσεις καλούνται μόνο για το πρώτο συστατικό του ονόματος πεδίου· τα επόμενα συστατικά διαχειρίζονται μέσω κανονικών λειτουργιών προσπέλασης και ευρετηρίασης.
Συνεπώς για παράδειγμα, η έκφραση πεδίου “0.name” θα προκαλέσει την
get_value()να κληθεί με ένα όρισμα key ίσο με 0. Το χαρακτηριστικόnameθα αναζητηθεί μετά την επιστροφή τηςget_value()καλώντας την ενσωματωμένη συνάρτησηgetattr().Εάν το ευρετήριο ή η λέξη-κλειδί αναφέρεται σε ένα στοιχείο που δεν υπάρχει, τότε θα πρέπει να γίνει raise μια
IndexErrorή μιαKeyError.
- check_unused_args(used_args, args, kwargs)¶
Υλοποιεί τον έλεγχο για μη χρησιμοποιούμενα ορίσματα αν το επιθυμείτε. Τα ορίσματα σε αυτή τη συνάρτηση είναι το σύνολο όλων των κλειδιών ορισμάτων που αναφέρθηκαν πραγματικά στη συμβολοσειρά μορφοποίησης (ακέραιοι για θέσεις ορισμάτων και συμβολοσειρές για ορισμένα ορίσματα), και μια αναφορά στα args και kwargs που περάστηκαν στη vformat. Το σύνολο των μη χρησιμοποιούμενων args μπορεί να υπολογιστεί από αυτές τις παραμέτρους. Η
check_unused_args()θεωρείται ότι κάνει raise μια εξαίρεση αν ο έλεγχος αποτύχει.
- format_field(value, format_spec)¶
Η
format_field()απλά καλεί τη καθολική ενσωματωμένηformat(). Η μέθοδος παρέχεται ώστε οι υποκλάσεις να μπορούν να την αντικαταστήσουν.
- convert_field(value, conversion)¶
Μετατρέπει την τιμή (που επιστρέφεται από την
get_field()) δεδομένου ενός τύπου μετατροπής (όπως στην πλειάδα που επιστρέφεται από τη μέθοδοparse()). Η προεπιλεγμένη έκδοση κατανοεί τους τύπους μετατροπής “s” (str), “r” (repr) και “a” (ascii).
Format string syntax¶
Η μέθοδος str.format() και η κλάση Formatter μοιράζονται την ίδια σύνταξη για τις συμβολοσειρές μορφοποίησης (αν και στην περίπτωση της Formatter, οι υποκλάσεις μπορούν να ορίσουν τη δική τους σύνταξη συμβολοσειρών μορφοποίησης). Η σύνταξη σχετίζεται με αυτή των formatted string literals και template string literals, αλλά είναι λιγότερο εξελιγμένη και, ειδικότερα, δεν υποστηρίζει αυθαίρετες εκφράσεις.
Οι συμβολοσειρές μορφοποίησης περιέχουν «πεδία αντικατάστασης» που περιβάλλονται από άγκιστρα {}. Οτιδήποτε δεν περιέχεται σε άγκιστρα θεωρείται κυριολεκτικό κείμενο, το οποίο αντιγράφεται αμετάβλητο στην έξοδο. Εάν χρειάζεται να συμπεριλάβετε έναν χαρακτήρα άγκιστρου στο κυριολεκτικό κείμενο, μπορείτε να διαφύγετε τον χαρακτήρα βάζοντας τον εις διπλούν: {{ και }}.
Η γραμματική για μια περιοχή αντικατάστασης είναι η εξής:
replacement_field: "{" [field_name] ["!"conversion] [":"format_spec] "}" field_name:arg_name("."attribute_name| "["element_index"]")* arg_name: [identifier|digit+] attribute_name:identifierelement_index:digit+ |index_stringindex_string: <any source character except "]"> + conversion: "r" | "s" | "a" format_spec:format-spec:format_spec
Σε λιγότερο επίσημους όρους, το πεδίο αντικατάστασης μπορεί να ξεκινά με ένα field_name που καθορίζει το αντικείμενο του οποίου η τιμή θα μορφοποιηθεί και θα εισαχθεί στην έξοδο αντί του πεδίου αντικατάστασης. Το field_name ακολουθείται προαιρετικά από ένα πεδίο conversion, το οποίο προηγείται από ένα θαυμαστικό '!', και μια format_spec, η οποία προηγείται από μια άνω και κάτω τελεία ':'. Αυτά καθορίζουν μια μη προεπιλεγμένη μορφή για την τιμή αντικατάστασης.
Δείτε επίσης την ενότητα Format specification mini-language.
Το field_name από μόνο του ξεκινάει με ένα arg_name το οποίο είναι είτε ένα αριθμός είτε μια λέξη-κλειδί. Εάν είναι αριθμός, αναφέρεται σε μια θέση, και εάν είναι λέξη-κλειδί, αναφέρεται σε μια ονομαστική λέξη-κλειδί. Ένα arg_name θεωρείται αριθμός εάν μια κλήση στην str.isdecimal() στη συμβολοσειρά επιστρέψει true. Εάν τα αριθμητικά arg_names σε μια συμβολοσειρά μορφοποίησης είναι 0, 1, 2, … στη σειρά, μπορούν όλα να παραλειφθούν (όχι μόνο μερικά) και οι αριθμοί 0, 1, 2, … θα εισαχθούν αυτόματα με αυτή τη σειρά. Επειδή το arg_name δεν είναι περιφραγμένο με διπλά εισαγωγικά, δεν είναι δυνατόν να καθοριστούν αυθαίρετα κλειδιά λεξικού (π.χ. οι συμβολοσειρές '10' ή ':-]') μέσα σε μια συμβολοσειρά μορφοποίησης. Το arg_name μπορεί να ακολουθείται από οποιονδήποτε αριθμό εκφράσεων ευρετηρίου ή χαρακτηριστικών. Μια έκφραση της μορφής '.name' επιλέγει το ονομαστικό χαρακτηριστικό χρησιμοποιώντας getattr(), ενώ μια έκφραση της μορφής '[index]' εκτελεί μια αναζήτηση ευρετηρίου χρησιμοποιώντας __getitem__().
Άλλαξε στην έκδοση 3.1: Οι προσδιοριστές θέσης μπορούν να παραλειφθούν για την str.format(), οπότε '{} {}'.format(a, b) είναι ισοδύναμο με '{0} {1}'.format(a, b).
Άλλαξε στην έκδοση 3.4: Οι προσδιοριστές θέσης μπορούν να παραλειφθούν για την Formatter.
Μερικά απλά παραδείγματα συμβολοσειρών μορφοποίησης:
"First, thou shalt count to {0}" # References first positional argument
"Bring me a {}" # Implicitly references the first positional argument
"From {} to {}" # Same as "From {0} to {1}"
"My quest is {name}" # References keyword argument 'name'
"Weight in tons {0.weight}" # 'weight' attribute of first positional arg
"Units destroyed: {players[0]}" # First element of keyword argument 'players'.
Το πεδίο conversion προκαλεί μια μετατροπή τύπου πριν από τη μορφοποίηση. Συνήθως, η εργασία της μορφοποίησης μιας τιμής γίνεται από τη μέθοδο __format__() της ίδιας της τιμής. Ωστόσο, σε ορισμένες περιπτώσεις, είναι επιθυμητό να αναγκαστεί ένας τύπος να μορφοποιηθεί ως συμβολοσειρά, παρακάμπτοντας τον δικό του ορισμό μορφοποίησης. Με τη μετατροπή της τιμής σε συμβολοσειρά πριν καλέσετε τη __format__(), παρακάμπτεται η κανονική λογική μορφοποίησης.
Τρεις σημαίες μετατροπής υποστηρίζονται επί του παρόντος: '!s' που καλεί την str() στην τιμή, '!r' που καλεί την repr() και '!a' που καλεί την ascii().
Μερικά παραδείγματα:
"Harold's a clever {0!s}" # Calls str() on the argument first
"Bring out the holy {name!r}" # Calls repr() on the argument first
"More {!a}" # Calls ascii() on the argument first
Το πεδίο format_spec περιέχει μια προδιαγραφή για το πώς θα πρέπει να παρουσιάζεται η τιμή, συμπεριλαμβανομένων λεπτομερειών όπως το πλάτος πεδίου, η ευθυγράμμιση, η συμπλήρωση, η δεκαδική ακρίβεια κ.λπ. Κάθε τύπος τιμής μπορεί να ορίσει τη δική του «μίνι γλώσσα μορφοποίησης» ή ερμηνεία του format_spec.
Οι περισσότεροι ενσωματωμένοι τύποι υποστηρίζουν μια κοινή μίνι γλώσσα μορφοποίησης, η οποία περιγράφεται στην επόμενη ενότητα.
Ένα πεδίο format_spec μπορεί επίσης να περιλαμβάνει εσωτερικά πεδία αντικατάστασης. Αυτά τα εσωτερικά πεδία αντικατάστασης μπορεί να περιέχουν ένα όνομα πεδίου, μια σημαία μετατροπής και μια προδιαγραφή μορφοποίησης, αλλά δεν επιτρέπεται βαθύτερη εσωτερική τοποθέτηση. Τα πεδία αντικατάστασης εντός του format_spec αντικαθίστανται πριν ερμηνευτεί η format_spec συμβολοσειρά. Αυτό επιτρέπει τη δυναμική προδιαγραφή της μορφοποίησης μιας τιμής.
Δείτε την ενότητα Παραδείγματα μορφοποίησης για μερικά παραδείγματα.
Format specification mini-language¶
Οι «προδιαγραφές μορφοποίησης» χρησιμοποιούνται εντός πεδίων αντικατάστασης που περιέχονται σε μια συμβολοσειρά μορφοποίησης για να καθορίσουν πώς παρουσιάζονται οι μεμονωμένες τιμές (βλ. Format string syntax και f-strings, και t-strings). Μπορούν επίσης να περαστούν απευθείας στην ενσωματωμένη συνάρτηση format(). Κάθε μορφοποιήσιμος τύπος μπορεί να ορίσει πώς θα ερμηνευτεί η προδιαγραφή μορφοποίησης.
Most built-in types implement the following options for format specifications, although some of the formatting options are only supported by the numeric types.
Μια γενική σύμβαση είναι ότι μια κενή προδιαγραφή μορφοποίησης παράγει το ίδιο αποτέλεσμα όπως αν καλούσατε την str() στη τιμή. Μια μη κενή προδιαγραφή μορφοποίησης συνήθως τροποποιεί το αποτέλεσμα.
Η γενική μορφή ενός τυπικού specifier μορφοποίησης είναι:
format_spec: [options][width_and_precision][type] options: [[fill]align][sign]["z"]["#"]["0"] fill: <any character> align: "<" | ">" | "=" | "^" sign: "+" | "-" | " " width_and_precision: [width_with_grouping][precision_with_grouping] width_with_grouping: [width][grouping] precision_with_grouping: "." [precision][grouping] | "."groupingwidth:digit+ precision:digit+ grouping: "," | "_" type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Αν μια έγκυρη τιμή align καθοριστεί, μπορεί να προηγείται από έναν χαρακτήρα fill που μπορεί να είναι οποιοσδήποτε χαρακτήρας και προεπιλέγεται σε κενό αν παραληφθεί. Δεν είναι δυνατή η χρήση ενός άγκιστρου (»{» ή «}») ως χαρακτήρα fill σε μια formatted string literal ή κατά τη χρήση της μεθόδου str.format(). Ωστόσο, είναι δυνατή η εισαγωγή ενός άγκιστρου με ένα εσωτερικό πεδίο αντικατάστασης. Αυτός ο περιορισμός δεν επηρεάζει την format() συνάρτηση.
Η σημασία των διαφόρων επιλογών ευθυγράμμισης είναι η εξής:
Επιλογή |
Σημασία |
|---|---|
|
Επιβάλλει το πεδίο να είναι αριστερά ευθυγραμμισμένο εντός του διαθέσιμου χώρου (αυτό είναι το προεπιλεγμένο για τα περισσότερα αντικείμενα). |
|
Επιβάλλει το πεδίο να είναι δεξιά ευθυγραμμισμένο εντός του διαθέσιμου χώρου (αυτό είναι το προεπιλεγμένο για τους αριθμούς). |
|
Επιβάλλει την προσθήκη του padding μετά το πρόσημο (αν υπάρχει) αλλά πριν από τα ψηφία. Αυτό χρησιμοποιείται για την εκτύπωση πεδίων στη μορφή “+000000120”. Αυτή η επιλογή ευθυγράμμισης είναι έγκυρη μόνο για αριθμητικούς τύπους, εξαιρουμένης της |
|
Επιβάλλει το πεδίο να είναι κεντραρισμένο εντός του διαθέσιμου χώρου. |
Σημειώστε ότι το πλάτος του πεδίου θα είναι πάντα το ίδιο μέγεθος με τα δεδομένα που το γεμίζουν, εκτός αν καθοριστεί ένα ελάχιστο πλάτος πεδίου, έτσι ώστε η επιλογή ευθυγράμμισης να μην έχει καμία σημασία σε αυτή την περίπτωση.
Η επιλογή sign είναι έγκυρη μόνο για αριθμητικούς τύπους και μπορεί να είναι μία από τις ακόλουθες:
Επιλογή |
Σημασία |
|---|---|
|
Υποδεικνύει ότι θα πρέπει να χρησιμοποιείται ένα πρόσημο τόσο για θετικούς όσο και για αρνητικούς αριθμούς. |
|
Υποδεικνύει ότι ένα πρόσημο θα πρέπει να χρησιμοποιείται μόνο για αρνητικούς αριθμούς (αυτή είναι η προεπιλεγμένη συμπεριφορά). |
κενό |
Υποδεικνύει ότι ένα κενό θα πρέπει να χρησιμοποιείται για θετικούς αριθμούς και ένα σημείο μείον για αρνητικούς αριθμούς. |
Η επιλογή 'z' αναγκάζει τις αρνητικές μηδενικές τιμές κινητής υποδιαστολής να γίνουν θετικές μηδενικές μετά την στρογγυλοποίηση στην ακρίβεια μορφοποίησης. Αυτή η επιλογή είναι έγκυρη μόνο για τύπους παρουσίασης κινητής υποδιαστολής.
Άλλαξε στην έκδοση 3.11: Προστέθηκε η επιλογή 'z' (δείτε επίσης το PEP 682).
Η επιλογή '#' προκαλεί την «εναλλακτική μορφή» να χρησιμοποιείται για τη μετατροπή. Η εναλλακτική μορφή ορίζεται διαφορετικά για διαφορετικούς τύπους. Αυτή η επιλογή είναι έγκυρη μόνο για ακέραιους, κινητής υποδιαστολής και σύνθετους τύπους. Για τους ακέραιους, όταν χρησιμοποιείται δυαδική, οκταδική ή δεκαεξαδική έξοδος, αυτή η επιλογή προσθέτει το αντίστοιχο πρόθεμα '0b', '0o', '0x', ή '0X' στην τιμή εξόδου. Για τους τύπους κινητής υποδιαστολής και τους σύνθετους, η εναλλακτική μορφή προκαλεί το αποτέλεσμα της μετατροπής να περιέχει πάντα έναν χαρακτήρα δεκαδικής υποδιαστολής, ακόμη και αν δεν ακολουθείται από ψηφία. Κανονικά, ένας χαρακτήρας δεκαδικής υποδιαστολής εμφανίζεται στο αποτέλεσμα αυτών των μετατροπών μόνο αν ακολουθείται από ψηφίο. Επιπλέον, για τις μετατροπές 'g' και 'G', τα τελικά μηδενικά δεν αφαιρούνται από το αποτέλεσμα.
Το width είναι ένας δεκαδικός ακέραιος που ορίζει το ελάχιστο συνολικό πλάτος πεδίου, συμπεριλαμβανομένων τυχόν προθεμάτων, διαχωριστικών και άλλων χαρακτήρων μορφοποίησης. Εάν δεν καθοριστεί, το πλάτος πεδίου θα προσδιοριστεί από το περιεχόμενο.
Όταν δε δίνεται ρητή ευθυγράμμιση, η προεξοχή του πεδίου width με έναν μηδενικό ('0') χαρακτήρα ενεργοποιεί την ευαισθησία στο σήμα για την προσθήκη μηδενικών για τους αριθμητικούς τύπους, εξαιρουμένης της complex. Αυτό είναι ισοδύναμο με έναν χαρακτήρα fill '0' με τύπο alignment '='.
Άλλαξε στην έκδοση 3.10: Η προεξοχή του πεδίου width με '0' δεν επηρεάζει πλέον την προεπιλεγμένη ευθυγράμμιση για τις συμβολοσειρές.
Το precision είναι ένας δεκαδικός ακέραιος που δείχνει πόσα ψηφία θα πρέπει να εμφανίζονται μετά την υποδιαστολή για τους τύπους παρουσίασης 'f' και 'F', ή πριν και μετά την υποδιαστολή για τους τύπους παρουσίασης 'g' ή 'G'. Για τους τύπους παρουσίασης συμβολοσειρών, το πεδίο υποδεικνύει το μέγιστο μέγεθος πεδίου - με άλλα λόγια, πόσοι χαρακτήρες θα χρησιμοποιηθούν από το περιεχόμενο του πεδίου. Το precision δεν επιτρέπεται για τους τύπους παρουσίασης ακεραίων.
Η επιλογή grouping μετά από τα πεδία width και precision καθορίζει έναν διαχωριστή ομάδων ψηφίων για το ακέραιο και το κλασματικό μέρος ενός αριθμού αντίστοιχα. Μπορεί να είναι μια από τις ακόλουθες επιλογές:
Επιλογή |
Σημασία |
|---|---|
|
Εισάγει ένα κόμα κάθε 3 ψηφία για μια ακέραια αναπαράσταση τύπου |
|
Εισάγει μια κάτω παύλα κάθε 3 ψηφία για μια ακέραια αναπαράσταση τύπου |
For a locale-aware separator, use the 'n'
float presentation type or
integer presentation type instead.
Άλλαξε στην έκδοση 3.1: Προστέθηκε η επιλογή ',' (δείτε επίσης το PEP 378).
Άλλαξε στην έκδοση 3.6: Προστέθηκε η επιλογή '_' (δείτε επίσης το PEP 515).
Άλλαξε στην έκδοση 3.14: Υποστήριξη της επιλογής grouping για το κλασματικό μέρος.
Τέλος, ο τύπος καθορίζει πώς θα πρέπει να παρουσιαστούν τα δεδομένα.
Οι διαθέσιμοι τύποι παρουσίασης συμβολοσειρών είναι:
Τύπος
Σημασία
's'Μορφή συμβολοσειράς. Αυτός είναι ο προεπιλεγμένος τύπος για συμβολοσειρές και μπορεί να παραλειφθεί.
None
Το ίδιο με το
's'.
Οι διαθέσιμοι τύποι παρουσίασης ακεραίων είναι:
Τύπος
Σημασία
'b'Δυαδική μορφή. Εξάγει τον αριθμό σε βάση 2.
'c'Χαρακτήρας. Μετατρέπει τον ακέραιο στον αντίστοιχο χαρακτήρα unicode πριν την εκτύπωση.
'd'Δεκαδικός ακέραιος. Εξάγει τον αριθμό σε βάση 10.
'o'Οκταδική μορφή. Εξάγει τον αριθμό σε βάση 8.
'x'Εξαδική μορφή. Εξάγει τον αριθμό σε βάση 16, χρησιμοποιώντας πεζά γράμματα για τα ψηφία πάνω από 9.
'X'Εξαδική μορφή. Εξάγει τον αριθμό σε βάση 16, χρησιμοποιώντας κεφαλαία γράμματα για τα ψηφία πάνω από 9. Σε περίπτωση που έχει καθοριστεί το
'#', το πρόθεμα'0x'θα μετατραπεί επίσης σε'0X'.
'n'Number. This is the same as
'd', except that it uses the current locale setting to insert the appropriate digit group separators. Note that the default locale is not the system locale. Depending on your use case, you may wish to setLC_NUMERICwithlocale.setlocale()before using'n'.None
Το ίδιο με το
'd'.
Εκτός από τους παραπάνω τύπους παρουσίασης, οι ακέραιοι μπορούν να μορφοποιηθούν και με τους τύπους παρουσίασης κινητής υποδιαστολής που αναφέρονται παρακάτω (εκτός από το 'n' και το None). Όταν το κάνουν αυτό, χρησιμοποιείται η float() για να μετατραπεί ο ακέραιος σε αριθμό κινητής υποδιαστολής πριν από τη μορφοποίηση.
Οι διαθέσιμοι τύποι παρουσίασης για τις float και Decimal τιμές είναι:
Τύπος
Σημασία
'e'Η επιστημονική σημειογραφία. Για μια δεδομένη ακρίβεια
p, μορφοποιεί τον αριθμό σε επιστημονική σημειογραφία με το γράμμα “e” να χωρίζει τον συντελεστή από τον εκθέτη. Ο συντελεστής έχει ένα ψηφίο πριν καιpψηφία μετά την δεκαδική υποδιαστολή, για ένα σύνολοp + 1σημαντικών ψηφίων. Χωρίς κάποια δεδομένη ακρίβεια, χρησιμοποιεί μια ακρίβεια6ψηφίων μετά την δεκαδική υποδιαστολή γιαfloat, και δείχνει όλα τα ψηφία του συντελεστή γιαDecimal. Ανp=0, η δεκαδική υποδιαστολή παραλείπεται εκτός αν έχει καθοριστεί η επιλογή#.For
float, the exponent always contains at least two digits, and is zero if the value is zero.
'E'Η επιστημονική σημειογραφία. Το ίδιο με το
'e'εκτός από το ότι χρησιμοποιεί ένα κεφαλαίο “E” ως χαρακτήρα διαχωρισμού.
'f'Η σημειογραφία σταθερής υποδιαστολής. Για μια δεδομένη ακρίβεια
p, μορφοποιεί τον αριθμό ως δεκαδικό αριθμό με ακριβώςpψηφία μετά την δεκαδική υποδιαστολή. Χωρίς καμία δεδομένη ακρίβεια, χρησιμοποιεί μια ακρίβεια6ψηφίων μετά την δεκαδική υποδιαστολή γιαfloat, και χρησιμοποιεί μια ακρίβεια αρκετά μεγάλη για να δείξει όλα τα ψηφία του συντελεστή γιαDecimal. Ανp=0, η δεκαδική υποδιαστολή παραλείπεται εκτός αν έχει καθοριστεί η επιλογή#.
'F'Η σημειογραφία σταθερής υποδιαστολής. Το ίδιο με το
'f', αλλά μετατρέπει τοnanσεNANκαι τοinfσεINF.
'g'Γενική μορφή. Για μια δεδομένη ακρίβεια
p >= 1, αυτή στρογγυλοποιεί τον αριθμό σεpσημαντικά ψηφία και στη συνέχεια μορφοποιεί το αποτέλεσμα είτε σε μορφή σταθερής υποδιαστολής είτε σε επιστημονική σημειογραφία, ανάλογα με το μέγεθός του. Μια ακρίβεια0θεωρείται ισοδύναμη με μια ακρίβεια1.Οι ακριβείς κανόνες είναι οι εξής: υποθέστε ότι το αποτέλεσμα που μορφοποιείται με τον τύπο παρουσίασης
'e'και ακρίβειαp-1θα είχε εκθέτηexp. Τότε, ανm <= exp < p, όπουmείναι -4 για floats και -6 γιαDecimals, ο αριθμός μορφοποιείται με τύπο παρουσίασης'f'και ακρίβειαp-1-exp. Διαφορετικά, ο αριθμός μορφοποιείται με τύπο παρουσίασης'e'και ακρίβειαp-1. Και στις δύο περιπτώσεις, τα ασήμαντα τελικά μηδενικά αφαιρούνται από τον σημαντικό αριθμό, και η δεκαδική υποδιαστολή αφαιρείται επίσης αν δεν υπάρχουν υπόλοιπα ψηφία μετά από αυτήν, εκτός αν έχει καθοριστεί η επιλογή'#'.Χωρίς κάποια δεδομένη ακρίβεια, χρησιμοποιεί μια ακρίβεια
6σημαντικών ψηφίων γιαfloat. ΓιαDecimal, ο συντελεστής του αποτελέσματος μορφοποιείται από τα ψηφία του συντελεστή της τιμής. Η επιστημονική σημειογραφία χρησιμοποιείται για τιμές μικρότερες από1e-6σε απόλυτη τιμή και τιμές όπου η θέση του λιγότερο σημαντικού ψηφίου είναι μεγαλύτερη από 1, και η σημειογραφία σταθερής υποδιαστολής χρησιμοποιείται διαφορετικά.Θετικό και αρνητικό άπειρο, θετικό και αρνητικό μηδέν, και nans, μορφοποιούνται ως
inf,-inf,0,-0καιnanαντίστοιχα, ανεξαρτήτως της ακρίβειας.
'G'Γενική μορφή. Το ίδιο με το
'g', εκτός από το ότι αλλάζει σε'E'αν ο αριθμός γίνει πολύ μεγάλος. Οι αναπαραστάσεις του απείρου και του NaN είναι επίσης κεφαλαία.
'n'Number. This is the same as
'g', except that it uses the current locale setting to insert the appropriate digit group separators for the integral part of a number. Note that the default locale is not the system locale. Depending on your use case, you may wish to setLC_NUMERICwithlocale.setlocale()before using'n'.
'%'Ποσοστό. Πολλαπλασιάζει τον αριθμό με το 100 και τον εμφανίζει σε σταθερή (
'f') μορφή, ακολουθούμενη από ένα σύμβολο ποσοστού.None
Για την
float, είναι παρόμοιο με τον τύπο'g', εκτός από το ότι όταν χρησιμοποιείται η σταθερή σημειογραφία για να μορφοποιηθεί το αποτέλεσμα, περιλαμβάνει πάντα τουλάχιστον ένα ψηφίο μετά την υποδιαστολή, και αλλάζει σε επιστημονική σημειογραφία ότανexp >= p - 1. Όταν η ακρίβεια δεν έχει καθοριστεί, η τελευταία θα είναι τόσο μεγάλη όσο χρειάζεται για να αναπαραστήσει τη δεδομένη τιμή πιστά.Για την
Decimal, αυτό είναι το ίδιο με το'g'ή το'G'ανάλογα με την τιμή τουcontext.capitalsγια το τρέχον δεκαδικό περιεχόμενο.Η συνολική επίδραση είναι να ταιριάζει η έξοδος της
str()όπως έχει τροποποιηθεί από τους άλλους τροποποιητές μορφής.
Το αποτέλεσμα θα πρέπει να στρογγυλοποιείται σωστά σε μια δεδομένη ακρίβεια p ψηφίων μετά την υποδιαστολή. Η μέθοδος στρογγυλοποίησης για την float ταιριάζει με αυτήν της ενσωματωμένης συνάρτησης round(). Για την Decimal, θα χρησιμοποιήσει τη στρογγυλοποίηση του τρέχοντος context.
Οι διαθέσιμες μορφές παρουσίασης για την complex είναι οι ίδιες με αυτές για την float ('%' δεν επιτρέπεται). Και τα δύο πραγματικά και φανταστικά μέρη ενός μιγαδικού αριθμού μορφοποιούνται ως αριθμοί κινητής υποδιαστολής, σύμφωνα με τον καθορισμένο τύπο παρουσίασης. Διαχωρίζονται από το υποχρεωτικό πρόσημο του φανταστικού μέρους, το οποίο τερματίζεται από ένα j επίθημα. Εάν ο τύπος παρουσίασης λείπει, το αποτέλεσμα θα ταιριάζει με την έξοδο της str() (μιγαδικοί αριθμοί με μη μηδενικό πραγματικό μέρος περιβάλλονται επίσης από παρενθέσεις), πιθανώς τροποποιημένο από άλλους τροποποιητές μορφής.
Παραδείγματα μορφοποίησης¶
Αυτή η ενότητα περιέχει παραδείγματα της σύνταξης str.format() και σύγκριση με την παλιά μορφοποίηση %.
Στις περισσότερες περιπτώσεις η σύνταξη είναι παρόμοια με την παλιά μορφοποίηση %, με την προσθήκη του {} και με : να χρησιμοποιείται αντί του %. Για παράδειγμα, το '%03.2f' μπορεί να μεταφραστεί σε '{:03.2f}'.
Το νέο συντακτικό μορφοποίησης υποστηρίζει επίσης νέες και διαφορετικές επιλογές, οι οποίες εμφανίζονται στα παρακάτω παραδείγματα.
Πρόσβαση σε ορίσματα κατά θέση:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
Πρόσβαση σε ορίσματα κατά όνομα:
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
Πρόσβαση σε χαρακτηριστικά ορισμάτων:
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
... 'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __str__(self):
... return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
Πρόσβαση σε στοιχεία ορισμάτων:
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
Αντικατάσταση του %s και %r:
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
Ευθυγράμμιση κειμένου και καθορισμός πλάτους:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # use '*' as a fill char
'***********centered***********'
Αντικατάσταση των %+f, %-f και % f και καθορισμός ενός προσήμου:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
Αντικατάσταση των %x και %o και μετατροπή της τιμής σε διαφορετικές βάσεις:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
Χρήση του κόμματος ή της κάτω παύλας ως διαχωριστικό ομάδας ψηφίων:
>>> '{:,}'.format(1234567890)
'1,234,567,890'
>>> '{:_}'.format(1234567890)
'1_234_567_890'
>>> '{:_b}'.format(1234567890)
'100_1001_1001_0110_0000_0010_1101_0010'
>>> '{:_x}'.format(1234567890)
'4996_02d2'
>>> '{:_}'.format(123456789.123456789)
'123_456_789.12345679'
>>> '{:.,}'.format(123456789.123456789)
'123456789.123,456,79'
>>> '{:,._}'.format(123456789.123456789)
'123,456,789.123_456_79'
Έκφραση ενός ποσοστού:
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
Χρήση ειδικής μορφοποίησης τύπου:
>>> import datetime as dt
>>> d = dt.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
Εμφωλευμένα ορίσματα και πιο σύνθετα παραδείγματα:
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
... for base in 'dXob':
... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
... print()
...
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
Συμβολοσειρές με πρότυπα ($-strings)¶
Σημείωση
Το χαρακτηριστικό που περιγράφεται εδώ εισήχθη στην Python 2.4∙ μια απλή μέθοδος δημιουργίας προτύπων βασισμένο σε κανονικές εκφράσεις. Προϋπήρξε της str.format(), των formatted string literals, και template string literals.
Δεν σχετίζεται με τις λεκτικές συμβολοσειρές (t-strings), οι οποίες εισήχθησαν στην Python 3.14. Αυτές αξιολογούνται σε αντικείμενα string.templatelib.Template, που βρίσκονται στο module string.templatelib.
Οι πρότυπες συμβολοσειρές παρέχουν απλούστερες αντικαταστάσεις συμβολοσειρών όπως περιγράφεται στο PEP 292. Μια βασική περίπτωση χρήσης για τις πρότυπες συμβολοσειρές είναι η διεθνοποίηση (i18n), καθώς σε αυτό το πλαίσιο η απλούστερη σύνταξη και λειτουργικότητα διευκολύνει τη μετάφραση σε σχέση με άλλες ενσωματωμένες δυνατότητες μορφοποίησης συμβολοσειρών στην Python. Ως ένα παράδειγμα μιας βιβλιοθήκης που βασίζεται σε πρότυπες συμβολοσειρές για i18n, δείτε το πακέτο flufl.i18n.
Οι πρότυπες συμβολοσειρές υποστηρίζουν αντικαταστάσεις με βάση το $, χρησιμοποιώντας τους εξής κανόνες:
$$είναι μια διαφυγή; αντικαθίσταται με ένα μόνο$.Το
$identifierορίζει μια θέση αντικατάστασης που ταιριάζει με ένα κλειδί αντιστοίχισης"identifier". Από προεπιλογή,"identifier"περιορίζεται σε οποιαδήποτε αλφαριθμητική συμβολοσειρά ASCII χωρίς διάκριση πεζών-κεφαλαίων (συμπεριλαμβανομένων των υπογραμμίσεων) που ξεκινά με μια υπογράμμιση ή ASCII γράμμα. Ο πρώτος μη αναγνωριστικός χαρακτήρας μετά τον χαρακτήρα$τερματίζει αυτήν την προδιαγραφή θέσης.Το
${identifier}είναι ισοδύναμο με το$identifier. Απαιτείται όταν οι έγκυροι χαρακτήρες αναγνωριστικού ακολουθούν τη θέση αλλά δεν είναι μέρος της θέσης, όπως στο"${noun}ification".
Η εμφάνιση οποιουδήποτε άλλου $ στη συμβολοσειρά θα έχει ως αποτέλεσμα να γίνει raise η ValueError.
The string module provides a Template class that implements
these rules. The methods of Template are:
- class string.Template(template)¶
Ο κατασκευαστής δέχεται ένα μόνο όρισμα, το οποίο είναι η πρότυπη συμβολοσειρά.
- substitute(mapping={}, /, **kwds)¶
Εκτελεί την αντικατάσταση προτύπου, επιστρέφοντας μια νέα συμβολοσειρά. Το mapping είναι οποιοδήποτε αντικείμενο που μοιάζει με λεξικό με κλειδιά που ταιριάζουν με τις θέσεις στην πρότυπη συμβολοσειρά. Εναλλακτικά, μπορείτε να παρέχετε ορίσματα λέξεων-κλειδιών, όπου οι λέξεις-κλειδιά είναι οι θέσεις. Όταν δίνονται και τα δύο mapping και kwds και υπάρχουν διπλότυπα, οι θέσεις από το kwds έχουν προτεραιότητα.
- safe_substitute(mapping={}, /, **kwds)¶
Όπως η
substitute(), με την εξαίρεση ότι εάν λείπουν θέσεις από τα mapping και kwds, αντί να γίνει raise μιαKeyErrorεξαίρεση, η αρχική θέση θα εμφανιστεί ανέπαφη στη συμβολοσειρά που προκύπτει. Επίσης, σε αντίθεση με τηνsubstitute(), οποιεσδήποτε άλλες εμφανίσεις του$θα επιστρέφουν απλώς$αντί να κάνουν raise τηνValueError.Ενώ άλλες εξαιρέσεις μπορούν να εμφανιστούν, αυτή η μέθοδος ονομάζεται «ασφαλής» διότι πάντα προσπαθεί να επιστρέψει μια χρησιμοποιήσιμη συμβολοσειρά αντί να κάνει raise μια εξαίρεση. Από μια άλλη άποψη, η
safe_substitute()μπορεί να είναι οτιδήποτε άλλο εκτός από ασφαλής, καθώς θα αγνοήσει σιωπηλά κακοσχηματισμένα πρότυπα που περιέχουν απροσδιόριστους διαχωριστές, μη ταιριαστές αγκύλες ή θέσεις που δεν είναι έγκυροι Python αναγνωριστικοί χαρακτήρες.
- is_valid()¶
Επιστρέφει
Falseεάν το πρότυπο έχει μη έγκυρα placeholders που θα προκαλέσουν τηνsubstitute()να κάνει raise μιαValueError.Added in version 3.11.
- get_identifiers()¶
Επιστρέφει μια λίστα με τα έγκυρα αναγνωριστικά στο πρότυπο, με τη σειρά που εμφανίζονται για πρώτη φορά, αγνοώντας τυχόν μη έγκυρα αναγνωριστικά.
Added in version 3.11.
Τα στιγμιότυπα της
Templateπαρέχουν επίσης ένα δημόσιο χαρακτηριστικό δεδομένων:- template¶
Αυτό είναι το αντικείμενο που μεταβιβάστηκε στο όρισμα template του κατασκευαστή. Γενικά, δεν θα πρέπει να το αλλάξετε, αλλά η πρόσβαση μόνο για ανάγνωση δεν επιβάλλεται.
Ακολουθεί ένα παράδειγμα χρήσης ενός προτύπου Template:
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'
Προχωρημένη χρήση: μπορείτε να προχωρήσετε σε υποκλάσεις της κλάσης Template για να προσαρμόσετε τη σύνταξη του placeholder, τον χαρακτήρα διαχωριστή ή ολόκληρη την κανονική έκφραση που χρησιμοποιείται για την ανάλυση των συμβολοσειρών προτύπων. Για να το κάνετε αυτό, μπορείτε να υπερκαλύψετε αυτά τα χαρακτηριστικά της κλάσης:
delimiter – Είναι η κυριολεκτική συμβολοσειρά που περιγράφει έναν διαχωριστή εισαγωγής θέσης. Η προεπιλεγμένη τιμή είναι
$. Σημειώστε ότι δεν θα πρέπει να είναι κανονική έκφραση, καθώς η υλοποίηση θα καλέσειre.escape()σε αυτή τη συμβολοσειρά όπως απαιτείται. Σημειώστε περαιτέρω ότι δεν μπορείτε να αλλάξετε τον διαχωριστή μετά τη δημιουργία της κλάσης (δηλαδή, ένας διαφορετικός διαχωριστής πρέπει να οριστεί στο namespace της υποκλάσης).idpattern – Είναι η κανονική έκφραση που περιγράφει το μοτίβο για μη περιβλημένα placeholders. Η προεπιλεγμένη τιμή είναι η κανονική έκφραση
(?a:[_a-z][_a-z0-9]*). Εάν αυτό δοθεί και το braceidpattern είναιNoneαυτό το μοτίβο θα ισχύει επίσης για τα περιβλημένα placeholders.Σημείωση
Από τη στιγμή που η προεπιλεγμένη flags είναι
re.IGNORECASE, το μοτίβο[a-z]μπορεί να ταιριάζει με ορισμένους μη-ASCII χαρακτήρες. Γι” αυτό χρησιμοποιούμε την τοπική σημαίαaεδώ.Άλλαξε στην έκδοση 3.7: Το braceidpattern μπορεί να χρησιμοποιηθεί για να ορίσει ξεχωριστά μοτίβα που χρησιμοποιούνται μέσα και έξω από τις αγκύλες.
braceidpattern – Αυτό είναι όπως το idpattern αλλά περιγράφει το μοτίβο για τα περιβλημένα placeholders. Η προεπιλεγμένη τιμή είναι
Noneπου σημαίνει ότι θα επιστρέψει στο idpattern (δηλαδή, το ίδιο μοτίβο χρησιμοποιείται τόσο μέσα όσο και έξω από τις αγκύλες). Εάν δοθεί, σας επιτρέπει να ορίσετε διαφορετικά μοτίβα για τα περιβλημένα και μη περιβλημένα placeholders.Added in version 3.7.
flags – Οι σημαίες κανονικής έκφρασης που θα εφαρμοστούν κατά την μεταγλώττιση της κανονικής έκφρασης που χρησιμοποιείται για την αναγνώριση των αντικαταστάσεων. Η προεπιλεγμένη τιμή είναι
re.IGNORECASE. Σημειώστε ότι τοre.VERBOSEθα προστεθεί πάντα στις σημαίες, οπότε οι προσαρμοσμένες idpatterns πρέπει να ακολουθούν τις συμβάσεις για την εκτενή κανονική έκφραση.Added in version 3.2.
Εναλλακτικά, μπορείτε να παρέχετε το πλήρες μοτίβο κανονικής έκφρασης υπερκαλύπτοντας το χαρακτηριστικό κλάσης pattern. Εάν το κάνετε αυτό, η τιμή πρέπει να είναι ένα αντικείμενο κανονικής έκφρασης με τέσσερις ονομαστικές ομάδες καταγραφής. Οι ομάδες καταγραφής αντιστοιχούν στους κανόνες που δίνονται παραπάνω, μαζί με τον κανόνα για τα μη έγκυρα placeholders:
escaped – Αυτή η ομάδα ταιριάζει με την ακολουθία διαφυγής, π.χ.
$$, στο προεπιλεγμένο μοτίβο.named – Αυτή η ομάδα ταιριάζει με το όνομα του placeholder που δεν περιβάλλεται από αγκύλες· δεν θα πρέπει να περιλαμβάνει τον διαχωριστή στην ομάδα καταγραφής.
braced – Αυτή η ομάδα ταιριάζει με το όνομα του placeholder που περιβάλλεται από αγκύλες· δεν θα πρέπει να περιλαμβάνει ούτε τον διαχωριστή ούτε τις αγκύλες στην ομάδα καταγραφής.
invalid – Αυτή η ομάδα ταιριάζει με οποιοδήποτε άλλο μοτίβο διαχωριστή (συνήθως ένα μοναδικό διαχωριστή), και θα πρέπει να εμφανίζεται τελευταίος στην κανονική έκφραση.
Οι μέθοδοι σε αυτή την κλάση θα κάνουν raise μια ValueError εάν το μοτίβο ταιριάζει με το πρότυπο χωρίς να ταιριάζει με μία από αυτές τις ονομαστικές ομάδες.
Βοηθητικές συναρτήσεις¶
- string.capwords(s, sep=None)¶
Χωρίζει το όρισμα σε λέξεις χρησιμοποιώντας την
str.split(), μετατρέπει κάθε λέξη σε κεφαλαία χρησιμοποιώντας τηνstr.capitalize(), και ενώνει τις κεφαλαίες λέξεις χρησιμοποιώντας τηνstr.join(). Αν το προαιρετικό δεύτερο όρισμα sep είναι απών ήNone, οι διαδοχικοί χαρακτήρες κενών αντικαθίστανται από έναν μόνο χώρο και τα αρχικά και τελικά κενά αφαιρούνται, διαφορετικά χρησιμοποιείται το sep για να χωρίσει και να ενώσει τις λέξεις.