Tegnsæt i regulære udtryk i Python
Tegngrupperne \d og \w er ikke
særlig fleksible. Selv en så simpel opgave
som at finde alle bogstaver, men ikke tal -
kan ikke løses af dem. Til sådanne opgaver
skal man bruge kantede parenteser,
der repræsenterer en 'eller'-operation.
Kantede parenteser erstatter et enkelt
tegn, ethvert af de tegn, der er angivet indeni. For
eksempel, sådan her: x[abc]x -
siger vi, at der skal stå bogstavet
x i enderne, og indeni - et tegn: enten 'a',
eller 'b', eller 'c'.
Efter kantede parenteser kan man skrive
gentagelsesoperatorer. For eksempel, sådan her:
x[abc]+x - siger vi, at indenfor
x'erne kan der være et hvilket som helst antal tegn
'a', 'b' og 'c' - i
enhver kombination.
Man kan ikke kun opremse tegn, men
også oprette tegn grupper ved at skrive mellem
to tegn en bindestreg. For eksempel, sådan her:
[a-d] - får vi alle tegn fra
'a' til 'd'.
Lad os se på eksempler.
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert bogstav fra
'a' til 'z':
Resultatet af kodeudførelsen:
'! ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert bogstav fra
'a' til 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'! ! xmx x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert bogstav fra
'A' til 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'xax ! xcx x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert tal fra 0
til 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'xax ! ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert tal fra 3
til 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'xax x1x ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert bogstav fra
'a' til 'z' eller tal fra
1 til 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'! ! ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert bogstav fra
'a' til 'z' eller bogstav fra
'A' til 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'! ! ! x5x x@x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er ethvert bogstav fra
'a' til 'z' eller tallene 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'! ! ! ! x3x'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: mellem x'er bogstaver fra 'a'
til 'z' i antal fra 1 og
derover:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'xx ! ! ! x123x xa3x'
Eksempel
Lad os gøre det så antallet af bogstaver også kan være nul:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Som resultat får vi:
'! ! ! ! x123x xa3x'
Eksempel
Inden i kantede parenteser kan man også angive escapede tegn. Lad os finde en sekvens af bogstaver og tal, gentaget nul eller flere gange:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'! x@x ! ! !'
Eksempel
Hvis vi har brug for at angive yderligere kantede parenteser, skal vi også escape dem:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Resultatet af kodeudførelsen:
'! ! ! x3x'
Praktiske opgaver
Givet en streng:
txt = 'aba aea aca aza axa'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstaverne
'a', og mellem dem - bogstavet 'b',
'e' eller 'x'.
Givet en streng:
txt = 'a1a a3a a7a a9a aba'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - et tal fra
3 til 6.
Givet en streng:
txt = 'aba aea afa aha aga'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - et bogstav fra
'a' til 'g'.
Givet en streng:
txt = 'aba aea afa aha aga'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - et bogstav fra
'a' til 'f' og fra 'j'
til 'z'.
Givet en streng:
txt = 'aAa aea aEa aJa a3a'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - et bogstav fra
'a' til 'f' og fra 'A'
til 'D'.
Givet en streng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - små
latinske bogstaver, uden at påvirke de andre.
Givet en streng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - små og
store latinske bogstaver, uden at påvirke
de andre.
Givet en streng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv et regulært udtryk, der finder efter
følgende mønster: i enderne står bogstavet
'a', og mellem dem - små
latinske bogstaver og tal, uden at påvirke
de andre.