Флагови за низове регуларних израза у Python-у
Да би се флагови задали као један од опционалних параметара за методе које раде са регуларним изразима, користи се следећа синтакса:
flags=re.име флага
Основни флагови за рад са регуларним изразима
| Флаг | Намена |
|---|---|
re.IGNORECASE |
Игнорисање регистра писања симбола. |
re.DOTALL |
Тачка означава било који симбол, укључујући и прелазак у нови ред. |
re.I |
Чини претрагу неосетљивом на регистар. |
re.L |
Тражи речи у складу са тренутним језиком.
Ова интерпретација утиче на алфабетску
групу (\w и \W), као и на
понашање границе речи (\b и
\B).
|
re.M |
Симбол $ обавља претрагу на крају
било ког реда текста (не само крају текста)
и симбол ^ обавља претрагу на почетку
било ког реда текста (не само на почетку
текста).
|
re.S |
Мења вредност тачке (.) на
подударање са било којим симболом, укључујући нови
ред.
|
re.U |
Тумари слова у складу са
скупом симбола Unicode. Овај флаг утиче
на понашање \w, \W, \b,
\B. У Python-у 3+ овај флаг
је подразумевано постављен.
|
re.X |
Омогућава вишередну синтаксу регуларног
израза. Игнорише размаке унутар
шаблона (осим размака унутар
скупа [] или када су екранирани
обрнутом косом цртом) и третира
неекранирани '#' као коментар.
|
Пример
Помоћу флага re.IGNORECASE може се
игнорисати регистар симбола. Хајде да
погледамо како се то ради. У овом примеру
регуларни израз ће пронаћи само мала слова:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Резултат извршавања кода:
'! ! CCC DDD'
Пример
А сада ћемо додати у четврти параметар
метода флаг re.IGNORECASE и регуларни израз
ће почети да тражи симболе у свим регистрима:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Резултат извршавања кода:
'! ! ! !'
Пример
Хајде да нађемо регуларним изразом све преласке у нови ред:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Резултат извршеног кода:
'aaa!bbb'
Пример
Али, ако треба заменити уопште све симболе, онда постављањем тачке у регуларном изразу, неће се захватити преласци у нови ред:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Резултат извршеног кода:
'!!!
!!!'
Пример
Да би се исправила ова грешка, треба
применити флаг re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Резултат извршеног кода:
'!!!!!!!'
Пример
У параметар се може проследити и више
флагова, стављајући између њих оператор +.
Хајде прво да заменимо слово 'a'
на крају реда:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Резултат извршеног кода:
'''
aaa
AAA
!
'''
Пример
Сада ћемо поставити флаг re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Резултат извршеног кода:
'''
!
AAA
!
'''
Пример
Хајде сада да применимо и флаг за игнорисање регистра:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Резултат извршеног кода:
'''
!
!
!
'''