დეფისი ნაკრებების შიგნით პითონის რეგულარულ გამოსახულებებში
დეფისი - ასევე სპეციალური სიმბოლოა [ ]-ის შიგნით
(მაგრამ გარეთ - არა). თუ თქვენ გჭირდებათ თავად
დეფისი, როგორც სიმბოლო - მაშინ მოათავსეთ იგი იქ,
სადაც ის არ აღიქმება, როგორც ჯგუფის გამყოფი.
რატომ არის ეს მნიშვნელოვანი: თქვენ შეგიძლიათ შექმნათ სიმბოლოთა ჯგუფი,
თავად ამის შეუმჩნევლად. მაგალითად,
აი ასე - '[:-@]' - თქვენ ფიქრობთ, რომ
ირჩევთ მრვიწყობილს, დეფისს და @-ს, მაგრამ
სინამდვილეში მიიღება სიმბოლოთა ჯგუფი
:-სა და @-ს შორის.
ამ ჯგუფში შედის
შემდეგი სიმბოლოები: ? < = > :
საიდან გაჩნდნენ ისინი? ASCII-ის ცხრილიდან - მრვიწყობილს აქვს ნომერი ნაკლები, ვიდრე @-ს - და მიიღება ჯგუფი. ანუ ყველა ჯგუფი მიიღება ASCII-ის ცხრილის მიხედვით (სურვილის შემთხვევაში ამით შესაძლებელია სარგებლობა).
როგორ ვიბრძოლოთ ამას: მოათავსეთ
დეფისის სიმბოლო
იქ, სადაც ის ნამდვილად არ აღიქმება
როგორც ჯგუფის სიმბოლო, მაგალითად, თავში ან
ბოლოში (ანუ [-ის შემდეგ ან
]-ის წინ).
ასევე შესაძლებელია დეფისის ესკაპირება - მაშინ
ის აღნიშნავს თავის თავს, მიუხედავად
პოზიციისა. მაგალითად, [:-@]-ის ნაცვლად
დაწეროთ [:\-@] - და ჯგუფი აღარ
იქნება, არამედ იქნება სამი სიმბოლო - მრვიწყობილი,
დეფისი და @ @.
მაგალითი
შემდეგ მაგალითში ძიების შაბლონი ასეთია:
ციფრი 1, შემდეგ ასო 'a'-დან
'z'-მდე, შემდეგ ციფრი 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! 1-2 ! !'
მაგალითი
ახლა კი ესკაპირება გავუკეთოთ დეფისს.
შედეგად ძიების შაბლონი ასეთია: ციფრი
1, შემდეგ ასო 'a', ან
დეფისი, ან ასო 'z', შემდეგ ციფრი
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! ! 1c2 !'
მაგალითი
შესაძლებელია უბრალოდ გადაადგილება დეფისის, ესკაპირების გარეშე:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! ! 1c2 !'
მაგალითი
შემდეგ მაგალითში ძიების შაბლონი ასეთია:
პირველი სიმბოლო - ეს არის პატარა ასოები ან
დეფისი '-', შემდეგ ორი ასო
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! Axx ! @xx'
მაგალითი
შემდეგ მაგალითში ძიების შაბლონი ასეთია:
პირველი სიმბოლო - ეს არის პატარა, დიდი
ასოები ან დეფისი '-', შემდეგ ორი ასო
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! ! ! @xx'
მაგალითი
შესაძლებელია დეფისის მოთავსება ორ ჯგუფს შორის - იქ ის ნამდვილად აღარ შექმნის კიდევ ერთ ჯგუფს:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! ! ! @xx'
პრაქტიკული ამოცანები
მოცემულია სტრიქონი:
txt = 'xaz xBz xcz x-z x@z'
იპოვეთ ყველა სტრიქონი შემდეგი შაბლონის მიხედვით:
ასო 'x', დიდი ან პატარა
ასო ან დეფისი, ასო 'z'.
მოცემულია სტრიქონი:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
იპოვეთ ყველა სტრიქონი შემდეგი შაბლონის მიხედვით:
ასო 'x', შემდეგ ან დოლარი, ან
დეფისი ან პლუსი, შემდეგ ასო 'z'.