Исботкунии мусбат ва манфӣ дар регуляриҳои Python

Гаҳего бояд масъалаи аз ин навъро ҳал кард: сатрро 'aaa' ёфта ба '!' иваз кунад, аммо танҳо агар паси 'aaa' 'x' истода бошад, ва худи 'x'-ро иваз накунад. Агар мо бихоҳем масъаларо 'рост' ҳал кунем, ҳеҷ чиз ба даст нахоҳем овард:

pythontxt = 'aaax baaa'
res = re.sub('aaax', '!', txt)

print(res) # '! baaa'-ро бармегардонад, амо '!x baaa'-ро мехостанд

Исботкунии пеш

Барои ҳалли масъала роҳе лозим аст, ки бигӯяд, ки 'x'-ро набояд иваз кард. Ин кор бо истифода аз қафсҳои вижаи (?= ) анҷом дода мешавад, ки танҳо мебинанд, вале бо худ намебаранд.

Ин қафсҳо исботкунии мусбати пеш номида мешаванд. Мусбат - зеро ки 'x' (дар ҳолати мо) бояд ҳаст - ҳамон вақт иваз карда мешавад.

Биёед ин қафсҳоро барои ҳалли масъалаи мо истифода кунем:

pythontxt = 'aaax baaa'
res = re.sub('aaa(?=x)', '!', txt)
print(res) # '!x aaab'-ро бармегардонад

Исботкунии манфии пеш низ вуҷуд дорад - (?! ) - он, баръакс, мегӯяд, ки чизие бояд набошад. Дар мисоли оянда, иваз кардан сурат мегирад, танҳо агар баъд аз 'aaa' НЕ 'x' истода бошад:

pythontxt = 'aaax aaab'
res = re.sub('aaa(?!x)', '!', txt)

print(res) # 'aaax !b'-ро бармегардонад

Исботкунии ақиб

Ҳамин тавр исботкунии мусбати ақиб вуҷуд дорад - (?<= ). Дар мисоли оянда иваз кардан сурат мегирад, танҳо агар пеш аз 'aaa' 'x' истода бошад:

pythontxt = 'xaaa'
res = re.sub('(?<=x)aaa', '!', txt)

print(res) # 'x!'-ро бармегардонад

Ва исботкунии манфии ақиб низ вуҷуд дорад - (?<! ). Дар мисоли оянда иваз кардан сурат мегирад, танҳо агар пеш аз 'aaa' 'x' истода набошад:

pythontxt = 'baaa'
res = re.sub('(?<!x)aaa', '!', txt)

print(res) # 'b!'-ро бармегардонад

Масъалаҳои амалӣ

Задание 1

Сатр дода шудааст, ки номҳои функсияҳоро дар бар мегирад:

pythontxt = 'func1() func2() func3()'

Массиви номҳои функсияҳоро аз сатр гиред.

Задание 2

Сатр бо тег дода шудааст:

pythontxt = '<a href="" class="eee" id="zzz">'

Массиви номҳои сифатҳои ин тегро гиред.

Задание 3

Сатр бо тағирёбандаҳо дода шудааст:

pythontxt = '$aaa $bbb $ccc xxxx'

Зерсатрҳоеро гиред, ки пеш аз онҳо аломати доллар истода бошад.