Групы сімвалаў у рэгулярных выразах Python
Існуюць спецыяльныя каманды, якія
дазваляюць выбраць адразу цэлыя групы
сімвалаў. Каманда \d азначае лічбу
ад 0 да 9. Каманда \w
абазначае лічбу, лацінскую літару ці знак
падкрэслівання. Каманда \s азначае
прабел ці прабельны сімвал: прабел,
перавод радка, табуляцыю. Можна інвертаваць
значэнне каманды, напісаўшы вялікую літару:
напрыклад, калі \d - лічба, то
\D - не лічба.
Прыклад
Давайце знойдзем усе лічбы:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Вынік выканання кода:
'! !! !!!'
Прыклад
Аператары паўтарэння лічаць каманды-групы
адным цэлым, гэта значыць групоўчыя дужкі
не патрэбныя. У наступным прыкладзе шаблон пошуку
выглядае так: лічба ад 0 да
9 адзін ці больш разоў:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! abc @@@'
Прыклад
У наступным прыкладзе шаблон пошуку выглядае
так: усё што заўгодна адзін ці больш разоў,
але не лічба ад 0 да 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Вынік выканання кода:
'123!3!'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае так: прабельны сімвал адзін раз:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Вынік выканання кода:
'1!12!123!abc!@@@'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: НЕ прабельны сімвал адзін ці больш
разоў. Усе падрадкі, падзеленыя
прабеламі, заменяцца на '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! ! !'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: лічба ці літара адзін ці больш
разоў. Усе падрадкі, якія складаюцца з лічбаў
і літар, заменяцца на '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! ! @@@'
Прыклад
У гэтым прыкладзе шаблон пошуку выглядае
так: НЕ лічба і НЕ літара адзін ці больш
разоў. Па дадзенае вызначэнне ў нашым
выпадку трапляе '@@@' і ўсе прабелы
(яны ж таксама не лічбы і не літары).
Звярніце ўвагу на тое, што ў канцы адзін
'!' - у яго пераўтварыўся радок
' @@@' - з прабелам наперадзе:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Вынік выканання кода:
'1!12!123!Abc!'
Практычныя задачы
Дадзены радок:
txt = 'a1a a2a a3a a4a a5a aba aca'
Напішыце рэгулярку, якая знойдзе радкі,
у якіх па краях стаяць літары 'a',
а паміж імі адна лічба.
Дадзены радок:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Напішыце рэгулярку, якая знойдзе радкі,
у якіх па краях стаяць літары 'a',
а паміж імі любая колькасць лічбаў.
Дадзены радок:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Напішыце рэгулярку, якая знойдзе радкі,
у якіх па краях стаяць літары 'a',
а паміж імі любая колькасць лічбаў (у тым
ліку і нуль лічбаў, гэта значыць радок
'aa').
Дадзены радок:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Напішыце рэгулярку, якая знойдзе радкі
наступнага выгляду: па краях стаяць літары
'a' і 'b', а паміж імі -
не лік і не прабел.
Дадзены радок:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Напішыце рэгулярку, якая знойдзе радкі
наступнага выгляду: па краях стаяць літары
'a' і 'b', а паміж імі -
не літара, не лічба і не прабел.
Дадзены радок:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Напішыце рэгулярку, якая замяніць усе
прабелы на '!'.