Наборы сімвалаў у рэгулярных выразах Python
Групы сімвалаў \d і \w не
вельмі гнуткія. Нават такая простая задача,
як знайсці ўсе літары, але не лічбы -
не можа быць вырашана імі. Для такіх задач
след выкарыстоўваць квадратныя дужкі,
якія ўяўляюць сабой аперацыю 'ці'.
Квадратныя дужкі замяняюць сабой адзін
сімвал, любы з пералічаных усярэдзіне. Да
прыкладу, вось так: x[abc]x - мы
гаворым, што па краях павінны стаяць літары
ікс, а ўсярэдзіне - адзін сімвал: ці 'a',
ці 'b', ці 'c'.
Пасля квадратных дужак можна пісаць
аператары паўтарэння. Да прыкладу, вось так:
x[abc]+x - мы гаворым, што ўсярэдзіне
іксаў можа быць любая колькасць сімвалаў
'a', 'b' і 'c' - у
любых камбінацыях.
Можна не толькі пералічваць сімвалы, але
ствараць групы сімвалаў, запісваючы паміж
двума сімваламі злучок. Да прыкладу, вось так:
[a-d] - мы атрымліваем усе сімвалы ад
'a' да 'd'.
Давайце паглядзім на прыкладах.
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая літара ад
'a' да 'z':
Вынік выканання кода:
'! ! ! x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая літара ад
'a' да 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Вынік выканання кода:
'! ! xmx x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая літара ад
'A' да 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Вынік выканання кода:
'xax ! xcx x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая лічба ад 0
да 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Вынік выканання кода:
'xax ! ! ! x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая лічба ад 3
да 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Вынік выканання кода:
'xax x1x ! ! x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая літара ад
'a' да 'z' ці лічба ад
1 да 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! ! x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая літара ад
'a' да 'z' ці літара ад
'A' да 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! x5x x@x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў любая літара ад
'a' да 'z' ці лічбы 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! ! x3x'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: паміж іксаў літары ад 'a'
да 'z' у колькасці ад 1 і
больш:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Вынік выканання кода:
'xx ! ! ! x123x xa3x'
Прыклад
Зробім так, каб колькасць літар магло быць і нуль:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
У выніку мы атрымаем:
'! ! ! ! x123x xa3x'
Прыклад
Усярэдзіне квадратных дужак таксама можна паказваць экранаваныя сімвалы. Давайце знойдзем паслядоўнасць літар і лічбаў, якая паўтараецца нуль ці больш разоў:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Вынік выканання кода:
'! x@x ! ! !'
Прыклад
Калі ж нам трэба паказаць яшчэ адны квадратныя дужкі, то мы іх таксама абавязкова экрануем:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! x3x'
Практычныя задачы
Дадзены радок:
txt = 'aba aea aca aza axa'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - літара 'b',
'e' ці 'x'.
Дадзены радок:
txt = 'a1a a3a a7a a9a aba'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - лічба ад
3 да 6.
Дадзены радок:
txt = 'aba aea afa aha aga'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - літара ад
'a' да 'g'.
Дадзены радок:
txt = 'aba aea afa aha aga'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - літара ад
'a' да 'f' і ад 'j'
да 'z'.
Дадзены радок:
txt = 'aAa aea aEa aJa a3a'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - літара ад
'a' да 'f' і ад 'A'
да 'D'.
Дадзены радок:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - маленькія
лацінскія літары, не зачапіўшы астатніх.
Дадзены радок:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - маленькія і
вялікія лацінскія літары, не зачапіўшы
астатніх.
Дадзены радок:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Напішыце рэгулярку, якая знойдзе па
наступным шаблоне: па краях стаяць літары
'a', а паміж імі - маленькія
лацінскія літары і лічбы, не зачапіўшы
астатніх.