Python re.sub με σημαία δεν αντικαθιστά όλες τις εμφανίσεις

ψήφοι
41

Οι γιατροί Python λένε:

re.MULTILINE: Όταν διευκρινίζεται, ο χαρακτήρας σχέδιο «^» αγώνες στην αρχή του string και στην αρχή κάθε γραμμής (αμέσως μετά από κάθε αλλαγή γραμμής) ... Από προεπιλογή, «^» ταιριάζει μόνο στην αρχή του string ...

Έτσι τι συμβαίνει όταν παίρνω το ακόλουθο απρόσμενο αποτέλεσμα;

>>> import re
>>> s = // The quick brown fox.
... // Jumped over the lazy dog.
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
Δημοσιεύθηκε 03/09/2008 στις 20:00
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
95

Κοιτάξτε τον ορισμό της re.sub:

sub(pattern, repl, string[, count])

Το 4ο επιχείρημα είναι ο αριθμός, που χρησιμοποιείτε re.MULTILINE(η οποία είναι 8), όπως η καταμέτρηση, όχι ως σημαία.

Θα πρέπει να συγκεντρώσει regex σας, αν θέλετε να χρησιμοποιήσετε σημαίες.

re.sub(re.compile('^//', re.MULTILINE), '', s)

Ένα flagsεπιχείρημα που προστέθηκε στην Python 2.7, έτσι ώστε η πλήρης ορισμός είναι τώρα:

re.sub(pattern, repl, string[, count, flags])

Το οποίο σημαίνει ότι:

re.sub('^//', '', s, flags=re.MULTILINE)

έργα.

Απαντήθηκε 03/09/2008 στις 20:08
πηγή χρήστη

ψήφοι
8
re.sub('(?m)^//', '', s)
Απαντήθηκε 25/03/2010 στις 15:10
πηγή χρήστη

ψήφοι
6

Η πλήρης ορισμός της re.subΚτΠ:

re.sub(pattern, repl, string[, count, flags])

Που σημαίνει ότι αν σας πω Python ποιες είναι οι παράμετροι, τότε μπορείτε να περάσετε flagsχωρίς διέλευση count:

re.sub('^//', '', s, flags=re.MULTILINE)

ή, πιο συνοπτικά:

re.sub('^//', '', s, flags=re.M)
Απαντήθηκε 30/08/2011 στις 17:33
πηγή χρήστη

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