Mafunzo ya C # Regex: Maonyesho ya Kawaida ya C # ni nini

Mafunzo haya ya C# Regex yanafafanua usemi wa kawaida katika C#, sintaksia yake, mbinu za darasa la Regex, na jinsi ya kutumia mbinu hizi kwa usaidizi wa mifano:

Usemi wa kawaida katika C # inatumika kwa kulinganisha muundo fulani wa mhusika. Misemo ya kawaida hutumiwa wakati wowote mtumiaji anapohitaji kupata mchoro unaojirudia au kufanya uthibitishaji wa data au hata kuangalia uumbizaji wa data.

RegEx inatumiwa kutafuta kama mfuatano una au unalingana na mchoro wa herufi fulani. Regex kimsingi ni mfuatano wa herufi unaoashiria mchoro.

Mchoro unaweza kuwa chochote kuanzia nambari, herufi, au mchanganyiko wa vyote. Regex inatumika sana kwa uthibitishaji. Mifuatano ya kuchanganua au inayolingana, kwa mfano, kutafuta kama mfuatano unalingana na umbizo la sarafu, nambari ya simu au umbizo la tarehe.

Regex Class Katika C#

Darasa la Regex linatumika katika C# kufanya shughuli za regex. Ina mbinu kadhaa tofauti zinazoweza kutumika kufanya shughuli tofauti zinazohusiana na regex.

Inaweza kutumiwa kuchanganua maandishi makubwa ili kupata mfuatano fulani wa herufi kwa kutumia mbinu zinazoweza kutumika kutekeleza ulinganifu, ili badilisha au inaweza kutumika kugawanya mfuatano wa herufi.

Aina ya regex ipo ndani ya nafasi ya majina; Mfumo.Maandishi.Maonyesho ya Kawaida. Darasa linakubali mfuatano katika mfumo wa mfuatano wa herufi kama kigezo.

Mbinu za C# Regex

tulichounda “^Super” kinaweza kulingana na thamani zote za superman, hata za juu zaidi au za kimbingu lakini hatutaki tu neno “Super”.

Hii inamaanisha kuwe na nafasi nyeupe baada ya neno alama mwisho wa neno na kuanza kwa neno lingine. Ili kufanya hivyo tutaongeza ishara “\s” kwenye mchoro na hivyo kufanya mchoro wetu wa mwisho kuwa

^Super\s

Mchoro wa 3: Tumia usemi wa Kawaida kupata faili sahihi. majina yenye kiendelezi cha aina ya faili ya picha.

Ili nyingine muhimu ya wakati halisi ambayo wasanidi mara nyingi hukabili ni uthibitishaji wa aina za faili. Hebu tuseme tuna kitufe cha kupakia katika Kiolesura, ambacho kinaweza tu kukubali viendelezi vya aina ya faili ya picha.

Tunahitaji kuthibitisha faili ya upakiaji ya mtumiaji na kumfahamisha iwapo atapakia umbizo lisilo sahihi. Hili linaweza kufikiwa kwa urahisi kwa kutumia usemi wa Kawaida.

Inayotolewa hapa chini ni programu rahisi ya kuangalia hii.

public static void Main(string[] args) gif)$"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("abc.jpg")); Console.WriteLine(reg.IsMatch("ab_c.gif")); Console.WriteLine(reg.IsMatch("abc123.png")); //When pattern doesnt match Console.WriteLine(reg.IsMatch(".jpg")); Console.WriteLine(reg.IsMatch("ask.jpegj")); 

Pato

Kweli

Kweli

Kweli

Uongo

Uongo

Ufafanuzi

Hapa tunahitaji kulinganisha na jina la faili. Jina halali la faili linajumuisha sehemu tatu ( jina la faili + . + kiendelezi cha faili ). Tunahitaji kuunda usemi wa kawaida ili kuendana na sehemu zote tatu. Hebu tuanze kwa kulinganisha sehemu ya kwanza yaani jina la faili. Jina la faili linaweza kuwa na herufi na nambari na herufi maalum.

Kama ilivyojadiliwa awali ishara ya kuashiria hiyo ni “\w”. Pia, jina la faili linaweza kuwa la moja au zaidiikifuatiwa na nukta (.) kisha jina la tovuti baada ya hapo nukta (.) na mwisho kiendelezi cha kikoa.

Kwa hivyo, sawa na hali iliyotangulia tutajaribu kuilinganisha sehemu kwa sehemu. . Wacha kwanza tuanze kwa kulinganisha "www." Sehemu. Kwa hivyo tunaanza na ishara ya kuanzia, kisha kama "www." Ni kitu ambacho kimewekwa, kwa hiyo tunatumia ishara ya kuanzia ikifuatiwa na maneno halisi ili kufanana.

“^www.”

Kisha tutaanza kufanyia kazi sehemu ya pili. Sehemu ya pili ya anwani ya wavuti inaweza kuwa jina lolote la alphanumeric. Kwa hivyo, hapa tutatumia mabano ya mraba yaliyopo katika darasa la wahusika ili kufafanua masafa ambayo yanahitaji kulinganishwa. Baada ya kuongeza sehemu ya pili na sehemu ya pili itatupa.

“^www.[a-zA-Z0-9]{3,20}”

Hapa pia tumeongeza brashi zilizopinda ili kufafanua urefu wa chini na upeo wa herufi kwa jina la tovuti. Tumetoa kiwango cha chini cha 3 na kisichozidi 20. Unaweza kutoa urefu wowote wa chini au upeo unaotaka.

Sasa, baada ya kujumuisha sehemu ya kwanza na ya pili ya anwani ya wavuti tumebakiwa na sehemu ya mwisho tu. sehemu, yaani ugani wa kikoa. Inafanana kabisa na tulivyofanya katika hali ya mwisho, tutalingana moja kwa moja na viendelezi vya kikoa kwa kutumia AU na kuambatanisha kila kiendelezi halali cha kikoa ndani ya mabano ya duara.

Hivyo tukijumlisha haya yote pamoja tutakuwa na usemi kamili wa kawaida ili kuendana na anwani yoyote halali ya tovuti.

www.[a-zA-Z0-9]{3,20}.(com|in|org|co\.in|net|dev)$

Mchoro wa 5: Tumia usemi wa Kawaida ili kuthibitishaumbizo la kitambulisho cha barua pepe

Hebu tuchukulie kuwa tuna fomu ya kuingia kwenye ukurasa wetu wa tovuti ambayo inawauliza watumiaji kuingiza barua pepe zao. Kwa sababu zilizo wazi, hatutataka fomu yetu iendelee zaidi na anwani za barua pepe zisizo sahihi. Ili kuthibitisha ikiwa anwani ya barua pepe iliyoingizwa na mtumiaji ni sahihi au la, tunaweza kutumia usemi wa kawaida.

Iliyotolewa hapa chini ni programu rahisi ya kuthibitisha anwani ya barua pepe.

public static void Main(string[] args) { string patternText = @"^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}.(com|org|co\.in|net)"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("[email protected]")); Console.WriteLine(reg.IsMatch("[email protected]")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("[email protected]")); }

Pato

Kweli

Kweli

Uongo

Maelezo

A barua pepe halali ina alfabeti, nambari, na baadhi ya herufi maalum kama vile nukta (.), dashi (-), na mistari chini (_) ikifuatiwa na alama ya "@" ambayo inafuatwa na jina la kikoa na kiendelezi cha kikoa.

Kwa hivyo, tunaweza kugawanya anwani ya barua pepe katika sehemu nne, yaani, kitambulisho cha barua pepe, alama ya "@", jina la kikoa, na ya mwisho ikiwa ni kiendelezi cha kikoa.

Hebu tuanze kwa kuandika usemi wa kawaida wa sehemu ya kwanza. Inaweza kuwa alpha-numeric na herufi maalum. Chukulia kuwa tuna ukubwa wa kujieleza kuanzia herufi 5 hadi 25. Sawa na jinsi tulivyoiandika hapo awali (katika hali ya barua pepe), tunaweza kuja na usemi ufuatao.

^[a-zA-Z0-9\._-]{5,25}

Sasa, tukihamia sehemu ya pili. Ni rahisi kwa kulinganisha kwani tunapaswa tu kulinganisha alama moja yaani "@". Kuiongeza kwa usemi ulio hapo juu inatupa.

^[a-zA-Z0-9\._-]{5,25}.@

Kusonga hadi sehemu ya tatu yaani jina la kikoa litakuwa safu ya chini kila wakati.maneno yanayolingana, alfabeti, anwani za tovuti, vitambulisho vya barua pepe, na hata aina za faili na viendelezi.

Matukio haya ni muhimu sana katika uthibitishaji wa wakati halisi wa ingizo la mtumiaji bila kuandika mistari mingi ya msimbo na hivyo kusaidia katika kuokoa muda na kupunguza utata. Mifano hii imetumika kuelekeza mtumiaji kuunda seti yake ya misemo ya kawaida na hivyo kuwasaidia katika kushughulikia matukio mengine kadhaa tofauti.

Regex inaweza kuwa rahisi kama kutumia alfabeti au nambari ili kulinganisha na mfululizo fulani wa wahusika au changamano kwa kutumia mchanganyiko wa herufi maalum, vibainishi, madarasa ya wahusika, n.k. ili kuthibitisha umbizo changamano au kutafuta muundo maalum katika mfululizo wa herufi.

Kwa kifupi, usemi wa kawaida ni mzuri sana. zana yenye nguvu kwa mtayarishaji programu na husaidia katika kupunguza kiasi cha msimbo kinachohitajika kukamilisha katika ulinganishaji wa data au kazi ya uthibitishaji.

IsMatch

Njia rahisi na muhimu zaidi katika darasa la Regex ni mbinu ya IsMatch. Mbinu hii ina upakiaji tofauti wa kutekeleza ulinganishaji wa herufi kulingana na vigezo tofauti.

Rahisi zaidi ni

Badilisha(String text, String replacementText)

Njia ya kubadilisha inakubali mbili. vigezo na kurejesha thamani ya kamba. Kigezo cha kwanza ni mfuatano wa herufi au regex unayotaka kutumia kwa mechi na cha pili ni uingizwaji wa regex.

Njia hii hufanya kazi kwa kutafuta ulinganifu wa maandishi uliyopewa na kisha kubadilisha hiyo na maandishi mbadala yaliyotolewa na mtumiaji. Sahihi ya mbinu ni mfuatano wa umma Badilisha(string text, string replacementText)

Mstari wa umma[] Split(string text)

Njia ya kugawanyika kutoka kwa darasa la regex inakubali pembejeo ya kamba kama kigezo na inarudisha safu iliyo na kamba ndogo. Kigezo kilichopitishwa katika mbinu ni mfuatano unaohitaji kugawanywa.

Njia hii hupata mchoro wa ingizo unaolingana katika mfuatano na mara inapobainisha mchoro wowote unaolingana, hugawanya kamba mahali hapo kuwa kamba ndogo kwa kutumia. kila muundo unaolingana ukiwa mahali pa kuvunjika. Mbinu kisha hurejesha safu iliyo na mifuatano yote.

Matumizi ya Mbinu za Regex C#

Hebu tuangalie matumizi ya mbinu hizi kwa kuandika programu rahisi.

public static void Main(string[] args) { string patternText = "Hello"; Regex reg = new Regex(patternText); //IsMatch(string input) Console.WriteLine(reg.IsMatch("Hello World")); //IsMatch(string input, int index) Console.WriteLine(reg.IsMatch("Hello", 0)); //IsMatch(string input, string pattern) Console.WriteLine(Regex.IsMatch("Hello World", patternText)); //Replace(string input, string replacement) Console.WriteLine(reg.Replace("Hello World", "Replace")); //Split(string input, string pattern) string[] arr = Regex.Split("Hello_World_Today", "_"); foreach(string subStr in arr) { Console.WriteLine("{0}", subStr); } }

Toleo la yaliyo hapo juumpango

Kweli

Kweli

Kweli

Badilisha Ulimwengu

Hujambo

Dunia

Leo

Ufafanuzi wa msimbo ulio hapo juu:

Mwanzoni mwa programu, tumeunda kipengee na kwa muundo ambao tutakuwa tukitumia. kwa ulinganishaji wa msimbo katika uingizaji wa kamba unaofuata, tumetumia uumbizaji wa maandishi ili kurahisisha mambo mwanzoni lakini ikiwa uko vizuri unaweza kuanza kutumia ruwaza za kawaida za usemi. (Tutajadili muundo wa usemi wa kawaida kwa kina tunaposonga mbele katika mafunzo haya)

Kisha, tutatumia mfuatano wa ulinganifu ili kuingiza kipengele ambacho tumekitangaza kama kitu kilichobainishwa kwa mfuatano wa ingizo na kama kinalingana. basi itarudi kurudisha uwongo.

Njia inayofuata tuliyotumia ni IsMethod(string input, int index). Njia hii inakubali parameta mbili, na hapa tunatoa kamba ya pembejeo na faharasa kutoka ambapo mechi inapaswa kuanza. Kwa mfano, hapa tulitaka kuanza ulinganishaji kuanzia mwanzo wa mfuatano wa ingizo.

Kisha tukaonyesha matumizi ya IsMatch(string input, string pattern). Hapa tulitoa mfuatano wa ingizo basi tulitaka kupata kwamba ikiwa maandishi ya muundo yapo kwenye ingizo au la. Ikiwa sasa yake basi itarudi kweli (kama ilivyo kwetu) vinginevyo itarudi kuwa ya uwongo.

Njia nyingine ambayo tuliijadili inabadilishwa. Njia hii ni muhimu sana katika programu ambapo unataka kufanya mabadiliko kwa data ya uingizajiau badilisha umbizo la data iliyopo.

Hapa tunatoa vigezo viwili, cha kwanza ni mfuatano wa ingizo na cha pili ni mfuatano unaoweza kutumika kuchukua nafasi ya mfuatano wa awali. Mbinu hii pia hutumia mchoro uliobainishwa katika kipengee cha regex ambacho tulifafanua awali.

Njia nyingine muhimu ambayo tulitumia, imegawanyika. Njia hii hutumiwa kugawanya kamba uliyopewa kulingana na muundo unaojirudia. Hapa, tumetoa mfuatano "Hujambo_Dunia_Leo".

Tuseme tunataka kuondoa mstari chini kutoka kwa mfuatano uliotolewa na kupata mistari midogo. Kwa hili, tunataja parameter ya pembejeo na kisha tunatoa muundo ambao tunahitaji kutumia kama sehemu ya kugawanyika. Mbinu hurejesha mkusanyiko na tunaweza kutumia kitanzi rahisi kama foreach kupata mifuatano yote.

Sintaksia ya Usemi wa Kawaida

Kuna sintaksia kadhaa tofauti kama vile herufi maalum, vikadiriaji, viwango vya wahusika, n.k. ambayo inaweza kutumika kulinganisha muundo fulani kutoka kwa ingizo fulani.

Katika sehemu hii ya mafunzo, tutakuwa tukizama ndani ya sintaksia inayotolewa na regex na tutajaribu kutatua baadhi ya matukio ya maisha halisi. kuzitumia. Kabla hatujaendelea, hakikisha kuwa umepata wazo la msingi la regex na mbinu tofauti zinazopatikana ndani ya darasa la regex.

Herufi Maalum

Herufi maalum katika regex hutumika kupeana maana kadhaa tofauti. kwa muundo. Sasa tutaangaliabaadhi ya herufi maalum zinazotumika sana na maana yake katika Regex.3

Herufi Maalum Maana
^ Hii ni mojawapo ya sintaksia inayotumika sana. Inaashiria mwanzo, neno au mchoro baada ya hii kuanza kuwiana tangu mwanzo wa maandishi ya ingizo.
$ Alama hii inatumika kwa kulinganisha maneno kutoka mwisho. ya kamba. Maneno/miundo iliyoashiriwa kabla ya alama hii italingana na maneno yaliyopo mwishoni mwa mfuatano.
. (kitone) Kitone hutumika kulinganisha herufi moja katika mfuatano uliotolewa kutokea mara moja.
\n Hii inatumika kwa mpya. mstari.
\d na \D Herufi ndogo 'd' hutumika kulinganisha herufi ya tarakimu na herufi kubwa 'D' inatumika kulinganisha na isiyo ya tarakimu. herufi.
\s na \S Herufi ndogo 's' hutumika kulinganisha nafasi nyeupe na herufi kubwa 'S' inatumika kulinganisha na nafasi isiyo nyeupe. .
\w na \W Herufi ndogo 'w' hutumika kulinganisha herufi na nambari za chini na herufi kubwa 'W' inatumika kulinganisha na isiyo ya neno. herufi.

Sintaksia ya Kikadiriaji

Sintaksia ya Kikadiriaji inatumika kuhesabu au kukadiria vigezo vinavyolingana. Kwa mfano, ukitaka kuangalia kama mfuatano fulani una alfabeti mara moja au zaidi. Hebu tuangalie baadhi ya vikadiriaji vinavyotumika sana katika usemi wa Kawaida.

KihakikiSintaksia Maana
* Alama hii inatumika kulingana na herufi iliyotangulia.
+ Alama hii inatumika kulinganisha herufi moja au zaidi mfululizo.
{n} Nambari ya tarakimu ndani ya kijipinda braces hutumika kulinganisha nambari ya herufi iliyotangulia iliyofafanuliwa kwa nambari ndani ya brashi zilizopindapinda.
{n,} Nambari iliyo ndani ya brashi zilizopinda na alama hii inatumika. ili kuhakikisha kuwa inalingana na angalau n (yaani thamani ya nambari ndani ya viunga).
{n, m} Alama hii inatumika kulinganisha kutoka kwa herufi iliyotangulia kutoka. n idadi ya nyakati kwa m idadi ya nyakati.
? Alama hii hufanya herufi zilizotangulia zilingane kama hiari.

Daraja la Wahusika

Aina ya wahusika pia inajulikana kama seti za wahusika, na hii inatumika kuwaambia injini ya regex kutafuta inayolingana moja kati ya herufi kadhaa. Darasa la herufi litalingana na herufi moja pekee na mpangilio wa herufi zilizoambatanishwa ndani ya seti haijalishi.

Aina ya Wahusika Maana
[ masafa ] Alama ya mabano ya mraba hutumika kulinganisha na anuwai ya herufi. Kwa mfano, tunaweza kuitumia kufafanua herufi yoyote katika safu kutoka kwa alfabeti “a” hadi “z” kwa kuambatanisha masafa ndani ya mabano kama vile [a-z]

Au, tunaweza pia kulinganisha na nambari “1” hadi “ 9” kwa kuashiriamisemo kwa kutumia baadhi ya mifano ya wakati halisi.

Mchoro wa 1: Thibitisha ikiwa mfuatano wa ingizo unajumuisha herufi 6 za alfabeti zisizo na hisia.

Hali ya kawaida ya usemi wa kawaida ni kutafuta na kulinganisha neno fulani. Kwa mfano, tuseme ninataka mfuatano wa kialfabeti nasibu kutoka kwa mtumiaji na ingizo hilo linapaswa kuwa na urefu wa tarakimu 6 haswa.

Ili kuthibitisha kwamba tunaweza kutumia usemi rahisi wa kawaida. Hebu tuandike programu ili kuelewa uandishi wa usemi wa kawaida na matumizi kwa njia bora zaidi.

public static void Main(string[] args) { string patternText = @"^[a-zA-Z]{6}$"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("Helios")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("Helo")); }

Pato

Kweli

Uongo

Maelezo

Katika mfano huu, tunajaribu kuthibitisha mfuatano wa ingizo, ili kuangalia ikiwa una herufi za alfabeti zenye tarakimu sita. Herufi zinaweza kuwa katika herufi ndogo na kubwa, kwa hivyo tunahitaji kuzingatia hilo pia.

Kwa hivyo, hapa tulifafanua muundo wa usemi wa kawaida katika kigezo cha "patternText" kisha tukaupitisha kwenye kitu cha regex. . Sasa, mistari inayofuata ya msimbo ni rahisi sana, tulitumia mbinu ya IsMatch kulinganisha usemi wa kawaida na mfuatano wa ingizo.

Hebu sasa tuangalie usemi wa kawaida ambao tumebuni. Usemi (^[a-zA-Z]{6}$) umeundwa na sehemu 4 tofauti. “^”, “[a-zA-Z]”, “{6}” na “$”. Sehemu ya pili inaashiria herufi zinazolingana, ambazo hutumika kulinganisha usemi, “a-z” kwa herufi ndogo na “A-Z” kwa herufi kubwa.

Ya kwanzasehemu ya herufi “^” huhakikisha kwamba mfuatano unaanza na mchoro uliofafanuliwa katika sehemu ya pili yaani herufi ndogo na kubwa.

Njiti zilizopindapinda katika sehemu ya tatu huamua idadi ya herufi katika mfuatano unaoweza kutambuliwa. kwa mchoro uliobainishwa yaani 6 katika hali hii na alama ya “$” hakikisha kwamba inaishia na mchoro uliobainishwa katika sehemu ya pili.

^[a-zA-Z]{6}$

Mchoro wa 2: Tumia usemi wa Kawaida ili kuthibitisha kwamba neno linaloanza na "Super" na lina nafasi nyeupe baada ya hapo, yaani, kuthibitisha ikiwa "Super" ipo mwanzoni mwa sentensi.

Tuchukulie kuwa tunasoma baadhi ya ingizo la mtumiaji na tunahitaji kuhakikisha kuwa mtumiaji anaanza sentensi yake kila wakati kwa neno, nambari au alfabeti fulani. Hili linaweza kupatikana kwa urahisi kwa kutumia usemi rahisi wa kawaida.

Hebu tuangalie sampuli ya programu kisha tujadili kwa kina jinsi ya kuandika usemi huu.

 public static void Main(string[] args) { string patternText = @"^Super\s"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("Super man")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("Superhero")); }

Output

Kweli

Siyo

Ufafanuzi

Katika mfano huu pia, tulitumia usanidi sawa wa msimbo kama tulivyofanya katika ya kwanza. Mchoro wa usemi wa kawaida katika hali hii unahitaji kuoanishwa na mchanganyiko wa maneno au sentensi zinazoanza na “Super”.

^Super

Kwa hivyo, tunapotaka kulinganisha tangu mwanzo wa neno. mfululizo, tutaanza kwa kuweka ishara "^", kisha tutatoa muundo ambao tunataka kufanana, katika kesi hii, "Super". Sasa muundo[1-9]

[^ mbalimbali] Hii inaashiria daraja la kibambo la kupuuza. Inatumika kulinganisha chochote, si katika safu iliyoashiriwa ndani ya mabano.
\ Hii inatumika kulinganisha vibambo maalum ambavyo vinaweza kuwa na alama zao za regex. Kufyeka hutumika kulinganisha herufi maalum katika umbo lao halisi.

Kuweka katika vikundi

Mabano ya pande zote au mabano yanaweza kutumika kupanga sehemu ya kawaida. kujieleza pamoja. Hii humruhusu mtumiaji ama kuongeza kihakiki kwa usemi.

Kupanga Maana
( kikundi usemi ) Mabano ya duara hutumika kupanga usemi.
herufi kwa hivyo itatumia ishara "+". Changanya na tunapata ishara kwa sehemu ya kwanza.
(\w+)

Mabano ilitenga hii katika sehemu. Sehemu inayofuata ni alama ya nukta. Kama alama ya nukta ina maana yake katika regex, tutatumia backslash kabla yake ili kuipa maana halisi. Changanya zote mbili na tuna sehemu mbili za kwanza za regex zilizofunikwa.

(\w+)\.

Sasa, kwa sehemu ya tatu na ya mwisho, tunaweza kufafanua moja kwa moja viendelezi vya faili vinavyohitajika kutengwa na "herufi za kialfabeti. Ukitaka unaweza pia kujumuisha herufi za herufi kubwa au nambari lakini kwa hali hii, tutaenda na herufi ndogo.

Tukiongeza usemi wa herufi ndogo zenye urefu wa kuanzia herufi 2 hadi 12, kisha tutakuwa na usemi ufuatao.

^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}

Sasa, tumebakiwa tu na usemi wa upanuzi wa kikoa, sawa na hali ya nne, tutashughulikia baadhi ya viendelezi maalum vya kikoa. Ikiwa unataka unaweza kuziongeza zaidi kwa kuzifunga ndani ya mabano ya duara na kuzitenganisha na "

Panda juu