Python නිතර යෙදීම් වල ධනාත්මක හා ඍණාත්මක පිරික්සුම්
සමහරවිට මේ වගේ ගැටලුවක් විසඳීමට අවශ්ය වේ:
'aaa' නූල සොයාගෙන එය
'!' කියලා ප්රතිස්ථාපනය කරන්න, නමුත් ඊළඟට
'aaa' වලට 'x' තියෙන විට පමණයි, ඒ
'x' එය ම ප්රතිස්ථාපනය නොකර. අපි
ගැටලුව 'පිළිවෙලට' විසඳීමට උත්සාහ කළොත්,
එය සාර්ථක නොවේ:
txt = 'aaax baaa'
res = re.sub('aaax', '!', txt)
print(res) # shows '! baaa', but we wanted '!x baaa'
ඉදිරිපස පිරික්සුම
ගැටලුව විසඳීමට අවශ්ය ක්රමයක් කියන්න,
'x' ප්රතිස්ථාපනය කළ යුතු නැති බව. එය සිදු කරන්නේ
විශේෂ වරහන් (?= ) භාවිතා කර,
පමණක් බලාගෙන, ගන්නේ නැත.
මෙම වරහන් හැඳින්වෙන්නේ ධනාත්මක ඉදිරිපස පිරික්සුම.
ධනාත්මක - මොකද 'x'
(අපගේ නඩුවේ) තිබිය යුතුය - එවිට පමණක්
ප්රතිස්ථාපනය සිදුවේ.
අපි මෙම වරහන් අපේ ගැටලුව විසඳීමට යොදා ගනිමු:
txt = 'aaax baaa'
res = re.sub('aaa(?=x)', '!', txt)
print(res) # shows '!x aaab
තියෙනවා ඍණාත්මක ඉදිරිපස පිරික්සුම
- (?! ) - එය, ඊට පටහැනිව, කියනවා,
එහි යමක් නොතිබිය යුතු බව. ඊළඟ
උදාහරණයේ, ප්රතිස්ථාපනය සිදුවන්නේ, 'aaa'
ට පසුව 'x' නොමැති නම් පමණි:
txt = 'aaax aaab'
res = re.sub('aaa(?!x)', '!', txt)
print(res) # shows 'aaax !b'
පසුපස පිරික්සුම
ඒ හා සමානව තියෙනවා ධනාත්මක
පසුපස පිරික්සුම - (?<= ).
ඊළඟ උදාහරණයේ ප්රතිස්ථාපනය සිදුවන්නේ,
'aaa' ට ඉදිරියෙන් 'x' තිබේ නම් පමණි:
txt = 'xaaa'
res = re.sub('(?<=x)aaa', '!', txt)
print(res) # shows 'x!'
තවද තියෙනවා ඍණාත්මක පසුපස පිරික්සුම
- (?<! ). ඊළඟ උදාහරණයේ
ප්රතිස්ථාපනය සිදුවන්නේ, 'aaa'
ට ඉදිරියෙන් 'x' නොමැති නම් පමණි:
txt = 'baaa'
res = re.sub('(?<!x)aaa', '!', txt)
print(res) # shows 'b!'
ප්රායෝගික ගැටලු
ශ්රිත නම් අඩංගු නූලක් දී ඇත:
txt = 'func1() func2() func3()'
නූලෙන් ශ්රිත නම් වල අරාව ලබා ගන්න.
ටැගයක් සහිත නූලක් දී ඇත:
txt = '<a href="" class="eee" id="zzz">'
මෙම ටැගයේ ගුණාංග නම් වල අරාව ලබා ගන්න.
විචල්ය සහිත නූලක් දී ඇත:
txt = '$aaa $bbb $ccc xxxx'
ඩොලර් සලකුණක් ඉදිරියෙන් ඇති උපනූල් ලබා ගන්න.