Κανονική Έκφραση στην Python 3.0 δεν ταιριάζουν

ψήφοι
47

Αν το string είναι I am Fineότι μου δίνει έξοδο ως I.

import re
string='hello I am Fine'
print(re.search(r'[A-Z]?',string).group())
Δημοσιεύθηκε 28/12/2016 στις 03:09
χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Οι ?διευκρινίζει που μπορεί ή δεν μπορεί να υπάρχει το προηγούμενο χαρακτήρα ή την τάξη. Όταν re.searchξεκινάει την αναζήτηση της συμβολοσειράς, δεν βρίσκουν ότι τάξης στην αρχή του string ... και αυτό είναι μια αποδεκτή αγώνα λόγω του ?. Είναι απλά επιστρέφει την κενή συμβολοσειρά.

>>> re.search(r'[A-Z]?', 'hello I am Fine').group()
''

Αν θέλετε να βρείτε την πρώτη κεφαλαίο γράμμα, δεν χρησιμοποιούν ?:

>>> re.search(r'[A-Z]', 'hello I am Fine').group()
'I'
Απαντήθηκε 28/12/2016 στις 03:21
πηγή χρήστη

ψήφοι
1

Μπορείτε να χρησιμοποιήσετε το findall μέθοδο.

Από docs Python , ενότητα 7.2.5.6,

findall() matches all occurrences of a pattern, not just the first one as search() does.

Στην περίπτωσή σου,

 >>> re.findall(r'[A-Z]',"hello I am Fine")
     ['I', 'F']
Απαντήθηκε 28/12/2016 στις 04:31
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more