Python නිතර යෙදීම් වල ධනාත්මක හා ඍණාත්මක පිරික්සුම්

සමහරවිට මේ වගේ ගැටලුවක් විසඳීමට අවශ්‍ය වේ: 'aaa' නූල සොයාගෙන එය '!' කියලා ප්‍රතිස්ථාපනය කරන්න, නමුත් ඊළඟට 'aaa' වලට 'x' තියෙන විට පමණයි, ඒ 'x' එය ම ප්‍රතිස්ථාපනය නොකර. අපි ගැටලුව 'පිළිවෙලට' විසඳීමට උත්සාහ කළොත්, එය සාර්ථක නොවේ:

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

print(res) # shows '! baaa', but we wanted '!x baaa'

ඉදිරිපස පිරික්සුම

ගැටලුව විසඳීමට අවශ්‍ය ක්‍රමයක් කියන්න, 'x' ප්‍රතිස්ථාපනය කළ යුතු නැති බව. එය සිදු කරන්නේ විශේෂ වරහන් (?= ) භාවිතා කර, පමණක් බලාගෙන, ගන්නේ නැත.

මෙම වරහන් හැඳින්වෙන්නේ ධනාත්මක ඉදිරිපස පිරික්සුම. ධනාත්මක - මොකද 'x' (අපගේ නඩුවේ) තිබිය යුතුය - එවිට පමණක් ප්‍රතිස්ථාපනය සිදුවේ.

අපි මෙම වරහන් අපේ ගැටලුව විසඳීමට යොදා ගනිමු:

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

තියෙනවා ඍණාත්මක ඉදිරිපස පිරික්සුම - (?! ) - එය, ඊට පටහැනිව, කියනවා, එහි යමක් නොතිබිය යුතු බව. ඊළඟ උදාහරණයේ, ප්‍රතිස්ථාපනය සිදුවන්නේ, 'aaa' ට පසුව 'x' නොමැති නම් පමණි:

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

print(res) # shows 'aaax !b'

පසුපස පිරික්සුම

ඒ හා සමානව තියෙනවා ධනාත්මක පසුපස පිරික්සුම - (?<= ). ඊළඟ උදාහරණයේ ප්‍රතිස්ථාපනය සිදුවන්නේ, 'aaa' ට ඉදිරියෙන් 'x' තිබේ නම් පමණි:

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

print(res) # shows 'x!'

තවද තියෙනවා ඍණාත්මක පසුපස පිරික්සුම - (?<! ). ඊළඟ උදාහරණයේ ප්‍රතිස්ථාපනය සිදුවන්නේ, 'aaa' ට ඉදිරියෙන් 'x' නොමැති නම් පමණි:

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

print(res) # shows 'b!'

ප්‍රායෝගික ගැටලු

Задание 1

ශ්‍රිත නම් අඩංගු නූලක් දී ඇත:

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

නූලෙන් ශ්‍රිත නම් වල අරාව ලබා ගන්න.

Задание 2

ටැගයක් සහිත නූලක් දී ඇත:

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

මෙම ටැගයේ ගුණාංග නම් වල අරාව ලබා ගන්න.

Задание 3

විචල්‍ය සහිත නූලක් දී ඇත:

pythontxt = '$aaa $bbb $ccc xxxx'

ඩොලර් සලකුණක් ඉදිරියෙන් ඇති උපනූල් ලබා ගන්න.