Պայթոնի ռեգուլյար արտահայտություններում հատուկ նիշերի էկրանավորում
Ենթադրենք, պետք է անենք այնպես, որ հատուկ նիշը նշանակի ինքն իրեն: Դրա համար այն պետք է էկրանավորել հակադարձ շեղի օգնությամբ: Դիտարկենք օրինակներով:
Օրինակ
Հաջորդ օրինակում ռեգուլյար արտահայտության հեղինակը ցանկանում էր,
որ որոնման ձևանմուշն ունենա այս տեսքը. տառ
'a', ապա պլյուս '+', ապա
տառ 'x': Սակայն, կոդի հեղինակը
չէկրանավորեց '+' նիշը, և այդ պատճառով
որոնման ձևանմուշն իրականում ունի այս տեսքը.
տառ 'a' մեկ կամ ավելի անգամ,
հետո տառ 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
Կոդի կատարման արդյունքը.
'a+x ! ! !'
Օրինակ
Այժմ հեղինակը էկրանավորել է պլյուսը հակադարձ
շեղով: Այժմ որոնման ձևանմուշն ունի այն տեսքը,
որը պետք է. տառ 'a', ապա պլյուս
'+', ապա տառ 'x'.
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
Կոդի կատարման արդյունքը.
'! ax aax aaax'
Օրինակ
Այս օրինակում ձևանմուշն ունի այս տեսքը.
տառ 'a', ապա կետ '.',
ապա տառ 'x'.
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
Կոդի կատարման արդյունքը.
'! abx azx'
Օրինակ
Հաջորդ օրինակում հեղինակը մոռացել է էկրանավորել կետը, և ռեգուլյար արտահայտությանը համապատասխանել են բոլոր ենթատողերը, քանի որ չէկրանավորված կետը նշանակում է ցանկացած նիշ.
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
Կոդի կատարման արդյունքը.
'! ! !'
Դիտողություն
Ուշադրություն դարձրեք, որ եթե դուք մոռանաք հակադարձ շեղը կետի համար (երբ այն պետք է նշանակի ինքն իրեն) - դա հնարավոր է նույնիսկ չնկատել.
res = re.sub('a.x', '!', 'a.x')
print(res) # կվերադարձնի '!', ինչպես մենք էլ ցանկանում էինք
Տեսողականորեն աշխատում է ճիշտ (քանի որ կետը
նշանակում է ցանկացած նիշ, ներառյալ սովորական
կետ '.'): Բայց եթե փոխենք
տողը, որում տեղի են ունենում փոխարինումները - մենք
կտեսնենք մեր սխալը.
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # կվերադարձնի '! ! !', իսկ սպասվում էր '! abx azx'
Հատուկ և սովորական նիշերի ցանկ
Եթե էկրանավորեք սովորական նիշ - ոչ մի սարսափելի բան չի պատահի - այն ամեն դեպքում կնշանակի ինքն իրեն: Բացառություն են կազմում թվանշանները, դրանք հնարավոր չէ էկրանավորել:
Հաճախ առաջանում է կասկած, արդյոք տվյալ նիշը հատուկ է: Ոմանք հասնում են նրան, որ էկրանավորում են բոլոր կասկածելի նիշերը անընդմեջ: Սակայն, սա վատ պրակտիկա է (կեղտոտում է ռեգուլյար արտահայտությունը հակադարձ շեղներով):
Հատուկ նիշեր են. $ ^ . * + ? \ / {} [] () |
Հատուկ նիշեր չեն. @ : , ' " - _ = < > % # ~ `& !
Գործնական առաջադրանքներ
Տրված է տող.
txt = 'a.a aba aea'
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'a.a' տողը, առանց մնացածները բռնելու:
Տրված է տող.
txt = '2+3 223 2223'
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'2+3' տողը, առանց մնացածները բռնելու:
Տրված է տող.
txt = '23 2+3 2++3 2+++3 345 567'
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'2+3', '2++3', '2+++3'
տողերը, առանց մնացածները բռնելու (+ կարող է լինել ցանկացած
քանակությամբ):
Տրված է տող.
txt = '23 2+3 2++3 2+++3 445 677'
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'23', '2+3', '2++3',
'2+++3' տողերը, առանց մնացածները բռնելու:
Տրված է տող.
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'*q+', '*qq+', '*qqq+'
տողերը, առանց մնացածները բռնելու:
Տրված է տող.
txt = '[abc] {abc} abc (abc) [abc]'
Գրեք ռեգուլյար արտահայտություն, որը կգտնի քառակուսի
փակագծերում գտնվող տողերը և կփոխարինի դրանք
'!'-ով: