Flaggor för reguljära uttryckssträngar i Python
För att ställa in flaggor som en av de valfria parametrarna för metoder som arbetar med reguljära uttryck, används följande syntax:
flags=re.flaggnamn
Huvudflaggor för att arbeta med reguljära uttryck
| Flagg | Syfte |
|---|---|
re.IGNORECASE |
Ignorerar skiftläget för tecken. |
re.DOTALL |
Punkten betecknar vilket tecken som helst, inklusive radbrytning. |
re.I |
Gör sökningen skiftlägesokänslig. |
re.L |
Söker ord enligt det aktuella språket.
Denna tolkning påverkar den alfabetiska
gruppen (\w och \W), samt
beteendet för ordgräns (\b och
\B).
|
re.M |
Tecknet $ utför sökning i slutet av
vilken rad som helst i texten (inte bara textens slut)
och tecknet ^ utför sökning i början av
vilken rad som helst i texten (inte bara i textens
början).
|
re.S |
Ändrar punktens (.) värde till
matchning med vilket tecken som helst, inklusive ny
rad.
|
re.U |
Tolkar bokstäver enligt Unicode-teckenuppsättningen.
Denna flagga påverkar
beteendet hos \w, \W, \b,
\B. I Python 3+ är denna flagga
inställd som standard.
|
re.X |
Tillåter flerradig syntax för reguljära
uttryck. Den ignorerar mellanslag inuti
mönstret (förutom mellanslag inuti
uppsättningen [] eller vid escaping
med omvänt snedstreck) och behandlar icke-
escapade '#' som kommentarer.
|
Exempel
Med flaggan re.IGNORECASE kan man
ignorera tecknens skiftläge. Låt oss
se hur det görs. I detta exempel
kommer det reguljära uttrycket att hitta bara små bokstäver:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Resultat av exekverad kod:
'! ! CCC DDD'
Exempel
Och nu lägger vi till i den fjärde parametern
för metoden flaggan re.IGNORECASE och det reguljära uttrycket
kommer att börja söka tecken i alla skiftlägen:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Resultat av exekverad kod:
'! ! ! !'
Exempel
Låt oss hitta alla radbrytningar med det reguljära uttrycket:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Resultat av exekverad kod:
'aaa!bbb'
Exempel
Men om man behöver ersätta alla tecken, så kommer, genom att sätta en punkt i det reguljära uttrycket, inte radbrytningar att fångas:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Resultat av exekverad kod:
'!!!
!!!'
Exempel
För att rätta till detta fel bör
flaggan re.DOTALL användas:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Resultat av exekverad kod:
'!!!!!!!'
Exempel
I parametern kan man också skicka flera
flaggor, genom att sätta operatorn + mellan dem.
Låt oss först ersätta bokstaven 'a'
i slutet av raden:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Resultat av exekverad kod:
'''
aaa
AAA
!
'''
Exempel
Nu sätter vi flaggan re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Resultat av exekverad kod:
'''
!
AAA
!
'''
Exempel
Låt oss nu applicera även flaggan för att ignorera skiftläge:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Resultat av exekverad kod:
'''
!
!
!
'''