JavaRush /Blog Jawa /Random-JV /RegEx: 20 langkah singkat kanggo nguwasani ekspresi regul...
Artur
tingkat
Tallinn

RegEx: 20 langkah singkat kanggo nguwasani ekspresi reguler. Bagean 3

Diterbitake ing grup
RegEx: 20 langkah singkat kanggo nguwasani ekspresi reguler. Part 1. RegEx: 20 langkah singkat kanggo nguwasani ekspresi biasa. Part 2: Ing bagean iki kita bakal pindhah menyang bab sing sethitik liyane Komplek. Nanging nguwasani wong-wong mau, kaya sadurunge, ora bakal angel. Aku mbaleni sing RegEx bener luwih gampang saka iku bisa koyone ing kawitan, lan sampeyan ora perlu dadi ilmuwan roket kanggo Master lan miwiti nggunakake ing laku. Ing Inggris asli artikel iki kene . 20 langkah singkat kanggo nguwasani ekspresi reguler.  Bagean 3 - 1

Langkah 11: Kurung ()minangka Capturing Groups

20 langkah singkat kanggo nguwasani ekspresi reguler.  Bagean 3 - 2Ing masalah pungkasan, kita nggoleki macem-macem jinis nilai integer lan nilai angka floating point (titik). Nanging mesin ekspresi reguler ora mbedakake antarane rong jinis nilai kasebut, amarga kabeh wis dijupuk ing ekspresi reguler sing gedhe. Kita bisa ngandhani mesin ekspresi reguler kanggo mbedakake antarane macem-macem jinis cocog yen kita nyakup pola mini ing kurung:
pola: ([AZ])|([az]) 
string:   Presiden Bolivia saiki yaiku Evo Morales .
cocog: ^^^ ^^^^^^^ ^^^^^^^^^ ^^ ^^^^^^^ ^^ ^^^ ^^^^^^^ 
kelompok:    122 2222222 122222222 22 1222222 22 122 1222222  
( Conto ) Ekspresi reguler ing ndhuwur nemtokake rong klompok jupuk sing diindeks wiwit 1. Klompok jupuk pisanan cocog karo huruf gedhe siji, lan klompok jupuk kapindho cocog karo huruf cilik siji. Kanthi nggunakake tandha |lan kurung 'utawa' ()minangka grup panangkep, kita bisa nemtokake ekspresi reguler siji sing cocog karo macem-macem senar. Yen kita aplikasi iki kanggo long/float search regex saka bagean sadurungé saka artikel, banjur regex engine bakal njupuk cocog cocog ing kelompok cocok. Kanthi mriksa klompok substring sing cocog, kita bisa langsung nemtokake manawa iku nilai float utawa nilai dawa:
pola: (\d*\.\d+[fF]|\d+\.\d*[fF]|\d+[fF])|(\d+[lL]) 
string:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0.
cocog: ^^^ ^^^^ ^^ ^^ ^^^ 
klompok:    222 1111 22 11 111  
( Tuladha ) Ekspresi reguler iki cukup rumit, lan supaya luwih ngerti, ayo dipecah lan deleng saben pola kasebut:
( // cocog karo substring "ngambang".
  \d*\.\d+[fF]
  |
  \d+\.\d*[fF]
  |
  \d+[fF]
)
| //UTAWA
( // cocog karo substring "dawa".
  \d+[lL]
)
Tandha |lan njupuk klompok ing kurung ()ngidini kita cocog macem-macem jinis substrings. Ing kasus iki, kita cocog karo nomer floating point "ngambang" utawa integer dawa "dawa".
(
  \d*\.\d+[fF] // 1+ digit ing sisih tengen titik desimal
  |
  \d+\.\d*[fF] // 1+ digit ing sisih kiwa titik desimal
  |
  \d+[fF] // ora ana titik, mung 1+ digit
)
|
(
  \d+[lL] // ora ana titik, mung 1+ digit
)
Ing grup panangkepan "ngambang", kita duwe telung opsi: nomer kanthi paling sethithik 1 digit ing sisih tengen titik desimal, nomer kanthi paling sethithik 1 digit ing sisih kiwa titik desimal, lan nomer tanpa titik desimal. Sapa wae sing "ngambang" anggere ana huruf "f" utawa "F" sing ditambahake ing pungkasan. Ing grup panangkepan "dawa" kita mung duwe siji pilihan - kita kudu duwe 1 utawa luwih digit diikuti karakter "l" utawa "L". Mesin ekspresi reguler bakal nggoleki substrings kasebut ing senar sing diwenehake lan ngindeks menyang grup panangkepan sing cocog. cathetansing kita ora cocog karo sembarang nomer sing ora duwe "l", "L", "f" utawa "F" ditambahake kanggo wong-wong mau. Kepiye carane nomer kasebut diklasifikasikake? Lha yen duwe titik desimal, basa Jawa bakune "ganda". Yen ora, dheweke kudu "int".

Ayo gabungke apa sing wis kita sinau karo sawetara teka-teki:

Tambah rong klompok panangkepan menyang regex ing ndhuwur supaya uga nggolongake nomer pindho utawa int. (Iki pitakonan angel liyane, aja pundung yen butuh sawetara wektu, minangka pilihan pungkasan, ndeleng solusiku.)
pola:
senar:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0. 
cocog: ^^^ ^^ ^^^^ ^^ ^^^ ^^ ^^^ ^^ 
grup:    333 44 1111 33 222 11 111 22
( Solusi ) Masalah sabanjure luwih gampang. Gunakake kelompok panangkepan bracketed (), tandha 'utawa', |lan kisaran karakter kanggo ngurutake umur ing ngisor iki: "sah kanggo ngombe ing AS." (>= 21) lan "ora diidini ngombe ing AS" (<21):
pola:
string:   7 10 17 18 19 20 21 22 23 24 30 40 100 120 
cocog: ^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ 
grup:    2 22 22 22 22 22 11 11 11 11 11 11 111 111 
( Solusi )

Langkah 12: Ngenali Pertandhingan Luwih Spesifik dhisik

20 langkah singkat kanggo nguwasani ekspresi reguler.  Bagean 3 - 3Sampeyan bisa uga wis sawetara alangan karo tugas pungkasan yen nyoba kanggo netepake "minum legal" minangka grup jupuk pisanan tinimbang kaloro. Kanggo ngerti sebabe, ayo goleki conto liyane. Upamane kita pengin ngrekam jeneng kulawarga kanthi kapisah sing ngemot kurang saka 4 karakter lan jeneng kulawarga sing ngemot 4 utawa luwih karakter. Ayo menehi jeneng sing luwih cendhek kanggo grup panangkepan pisanan lan deleng apa sing kedadeyan:
pola: ([AZ][az]?[az]?)|([AZ][az][az][az][az]+) 
string:   Kim Ayub s Xu Clo yd Moh r Ngo Roc k.
cocog: ^^^ ^^^ ^^ ^^^ ^^^ ^^^ ^^^ 
klompok:    111 111 11 111 111 111 111   
( Conto ) Kanthi gawan, umume mesin ekspresi reguler nggunakake pencocokan rakus marang karakter dhasar sing wis katon nganti saiki. Iki tegese mesin ekspresi reguler bakal nangkep klompok paling dawa sing ditetepake sedini mungkin ing ekspresi reguler sing diwenehake. Dadi, sanajan klompok kapindho ing ndhuwur bisa njupuk luwih akeh karakter ing jeneng kayata "Jobs" lan "Cloyd", umpamane, nanging amarga telung karakter pisanan saka jeneng kasebut wis dijupuk dening grup panangkepan pisanan, mula ora bisa dicekel maneh dening sing nomer loro. . Saiki ayo nggawe koreksi cilik - mung ngganti urutan grup panangkepan, nyelehake grup sing luwih spesifik (luwih dawa) dhisik:
pola: ([AZ][az][az][az]+)|([AZ][az]?[az]?) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
cocog: ^^^ ^^^^ ^^ ^^^^^ ^^^^ ^^^ ^^^^ 
kelompok:    222 1111 22 11111 1111 222 1111    
( Conto )

Tugas... wektu iki mung siji :)

Pola "luwih spesifik" meh mesthi tegese "luwih suwe". Contone, kita pengin nemokake rong jinis "tembung": pisanan sing diwiwiti kanthi aksara swara (luwih khusus), banjur sing ora diwiwiti kanthi aksara swara (tembung liyane). Coba nulis ekspresi reguler kanggo njupuk lan ngenali senar sing cocog karo rong klompok kasebut. (Klompok ing ngisor iki nganggo huruf tinimbang nomer. Sampeyan kudu nemtokake klompok sing cocog karo sing pisanan lan sing nomer loro.)
pola:
string:   pds6f uub 24r2gp ewqrty l ui_op 
cocog: ^^^^^ ^^^ ^^^^^^ ^^^^^^ ^ ^^^^^ 
grup:    NNNNN VVV NNNNNN VVVVVV N VVVVV
( Solusi ) Umumé, ekspresi reguler sing luwih tepat, luwih suwe. Lan luwih akurat, kemungkinan sampeyan bakal nangkep barang sing ora dibutuhake. Dadi, sanajan katon medeni, regex sing luwih dawa ~= regex sing luwih apik. Sayange .

Langkah 13: Kurung kriting {}kanggo jumlah repetisi tartamtu

20 langkah singkat kanggo nguwasani ekspresi reguler.  Bagean 3 - 4Ing conto karo jeneng mburi saka langkah sadurunge, kita duwe 2 meh mbaleni klompok ing siji pola:
pola: ([AZ][az][az][az]+)|([AZ][az]?[az]?) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
cocog: ^^^ ^^^^ ^^ ^^^^^ ^^^^ ^^^ ^^^^ 
kelompok:    222 1111 22 11111 1111 222 1111    
Kanggo klompok pisanan, kita butuh jeneng mburi kanthi papat utawa luwih huruf. Klompok kapindho kudu njupuk jeneng kanthi telung utawa kurang huruf. Apa ana cara sing luwih gampang kanggo nulis iki tinimbang mbaleni [a-z]klompok kasebut bola-bali? Ana yen sampeyan nggunakake kurung kriting kanggo iki {}. Kurung kriting {}ngidini kita nemtokake jumlah minimal lan (opsional) maksimum sing cocog karo karakter utawa grup panangkepan sadurunge. Ana telung kasus panggunaan {}:
{X} // cocog persis kaping X
{X,} // cocog >= kaping X
{X,Y} // cocog >= X lan <= Y kaping
Ing ngisor iki conto telung sintaksis sing beda-beda iki:
pola: [az]{11} 
string:   humuhumunuk unukupua'a.
cocog: ^^^^^^^^^^^^   
( Conto )
pola: [az]{18,} 
string:   humuhumunukunukuapua 'a.
cocog: ^^^^^^^^^^^^^^^^^^^^^^^    
( Conto )
pola: [az]{11,18} 
string:   humuhumunukunukukap ua'a.
cocog: ^^^^^^^^^^^^^^^^^^^^    
( Tuladha ) Ana sawetara titik sing kudu digatekake ing conto ing ndhuwur.cathetan:. Kaping pisanan, nggunakake notasi {X}, karakter utawa grup sadurunge bakal cocog karo nomer kasebut (X) kaping. Yen ana luwih akeh karakter ing "tembung" (saka angka X) sing bisa cocog karo pola kasebut (kaya sing ditampilake ing conto pisanan), mula dheweke ora bakal kalebu ing pertandhingan kasebut. Yen jumlah karakter kurang saka X, pertandhingan lengkap bakal gagal (coba ganti 11 dadi 99 ing conto pisanan). Kapindho, notasi {X,} lan {X,Y} iku rakus. Padha bakal nyoba kanggo cocog minangka akeh karakter sabisa nalika isih marem expression biasa diwenehi. Yen sampeyan nemtokake {3,7} banjur 3 nganti 7 karakter bisa dicocogake lan yen 7 karakter sabanjure bener, kabeh 7 karakter bakal cocog. Yen sampeyan nemtokake {1,} lan kabeh 14.000 karakter sabanjure cocog, banjur kabeh 14.000 karakter kasebut bakal dilebokake ing string sing cocog. Kepiye carane nggunakake kawruh iki kanggo nulis maneh ekspresi ing ndhuwur? Perbaikan sing paling gampang yaiku ngganti klompok tetanggan [a-z]karo [a-z]{N}, ing ngendi N dipilih miturut:
pola: ([AZ][az]{2}[az]+)|([AZ][az]?[az]?)  
...nanging ora nggawe kahanan luwih apik. Deleng klompok panangkepan pisanan: kita duwe [a-z]{2}(sing cocog karo 2 huruf cilik) banjur [a-z]+(sing cocog karo 1 utawa luwih huruf cilik). Kita bisa nyederhanakake iki kanthi njaluk 3 utawa luwih huruf cilik nggunakake kurung kriting:
pola: ([AZ][az]{3,})|([AZ][az]?[az]?) 
Klompok panangkepan kapindho beda. Kita mbutuhake ora luwih saka telung karakter ing jeneng mburi iki, tegese kita duwe wates ndhuwur, nanging watesan ngisor iki nol:
pola: ([AZ][az]{3,})|([AZ][az]{0,2}) 
Spesifisitas tansah luwih apik nalika nggunakake ungkapan biasa, supaya iku bakal dadi wicaksana kanggo mungkasi ana, nanging aku ora bisa bantuan nanging sok dong mirsani sing loro kisaran karakter ( [AZ]lan [az]) jejere saben liyane katon meh kaya kelas "karakter tembung", \w( [A-Za-z0-9_]) . Yen kita yakin manawa data kita mung ngemot jeneng mburi sing diformat kanthi apik, mula kita bisa nyederhanakake ekspresi reguler lan nulis kanthi gampang:
pola: (\w{4,})|(\w{1,3}) 
Klompok pisanan njupuk urutan apa wae saka 4 utawa luwih "karakter tembung" ( [A-Za-z0-9_]), lan klompok kapindho njupuk urutan saka 1 nganti 3 "karakter tembung" (kalebu). Iki bakal bisa?
pola: (\w{4,})|(\w{1,3}) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
cocog: ^^^ ^^^^ ^^ ^^^^^ ^^^^ ^^^ ^^^^ 
kelompok:    222 1111 22 11111 1111 222 1111    
( Conto ) Iku bisa! Kepiye babagan pendekatan iki? Lan luwih resik tinimbang conto sadurunge. Wiwit grup panangkepan pisanan cocog karo kabeh jeneng kulawarga kanthi papat utawa luwih karakter, kita malah bisa ngganti grup panangkepan kapindho dadi mung \w+, amarga iki bakal ngidini kita njupuk kabeh jeneng kulawarga sing isih ana (karo 1, 2, utawa 3 karakter):
pola: (\w{4,})|(\w+) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
cocog: ^^^ ^^^^ ^^ ^^^^^ ^^^^ ^^^ ^^^^ 
kelompok:    222 1111 22 11111 1111 222 1111    
( Conto )

Ayo mbantu otak sinau babagan iki lan ngrampungake 2 masalah ing ngisor iki:

Gunakake kurung kriting {}kanggo nulis ulang ekspresi reguler goleki nomer jaminan sosial saka langkah 7:
pola:
string: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
cocog:              ^^^^^^^^^^^^
( Solusi ) Anggap manawa pamriksa kekuatan sandi situs web mbutuhake tembung sandhi pangguna antarane 6 lan 12 karakter. Tulis ekspresi biasa sing menehi tandha sandhi sing ora bener ing dhaptar ing ngisor iki. Saben tembung sandhi ana ing kurung ()supaya gampang dicocogake, mula priksa manawa ekspresi reguler diwiwiti lan diakhiri nganggo karakter literal (lan )simbolis. Petunjuk: priksa manawa sampeyan ora ngidini tanda kurung harfiah ing tembung sandhi [^()]utawa sing padha, yen ora, sampeyan bakal cocog karo kabeh string!
pola:
string:   (12345) (sandi) (Xanadu.2112) (su_do) (OfSalesmen!)
cocog: ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^  
( Solusi )

Langkah 14: \bSimbol Wates Lebar Zero

20 langkah singkat kanggo nguwasani ekspresi reguler.  Bagean 3 - 5Tugas pungkasan cukup angel. Nanging apa yen kita digawe iku sethitik liyane rumit dening enclosing sandhi ing kuotasi ""tinimbang kurung ()? Apa kita bisa nulis solusi sing padha kanthi ngganti kabeh karakter kurung karo karakter kutipan?
pola: \"[^"]{0.5}\"|\"[^"]+\s[^"]*\" 
string:   "12345" "sandiku" "Xanadu.2112 " " su_do" " Para Penjual! "
cocog: ^^^^^^^ ^^^^^^^^^^^^^^^ ^^^ ^^^  
( Conto ) Ora ketok banget. Apa sampeyan wis ngira kenapa? Masalahe yaiku kita nggoleki tembung sandhi sing salah ing kene. "Xanadu.2112" iku sandi apik, supaya nalika regex nyadari yen urutan iki ora ngemot spasi utawa karakter harfiah ", iku pametumu sadurunge karakter "sing nduweni sandi ing sisih tengen. (Amarga kita nemtokake manawa karakter "ora bisa ditemokake ing tembung sandhi nggunakake [^"].) Sawise mesin ekspresi reguler puas yen karakter kasebut ora cocog karo ekspresi reguler tartamtu, banjur mlaku maneh, persis ing endi sing ditinggalake - ing endi karakter kasebut ". sing mbatesi " Xanadu.2112" ing sisih tengen. Saka ing kono dheweke weruh siji karakter spasi, lan karakter liyane "- kanggo wong iki sandi salah! Sejatine, dheweke nemokake urutan iki " "lan nerusake. Iki dudu apa sing dikarepake ... Iku bakal apik yen kita bisa nemtokake yen karakter pisanan saka tembung sandhi ngirim ora spasi. Apa ana cara kanggo nindakake iki? (Saiki, sampeyan mbokmenawa wis ngerti yen jawaban kanggo kabeh pitakonan retorikaku yaiku "ya.") Ya! Ana cara kuwi! Akeh mesin ekspresi reguler nyedhiyakake urutan uwal kayata "wates tembung" \b. "Watesan tembung" \bminangka urutan uwal sing ambane nol, sing aneh, cocog karo wates tembung. Elinga yen kita ngomong "tembung", kita ateges salah siji sembarang urutan karakter ing kelas \wutawa [A-Za-z0-9_]. Tetandhingan wewatekan tembung tegese watake sakdurunge utawa sakwise runtut \bkudu dadi неwatek tembung. Nanging, nalika cocog, kita ora kalebu karakter iki ing substring dijupuk. Iki nol jembaré. Kanggo ndeleng cara kerjane, ayo goleki conto cilik:
pola: \b[^ ]+\b 
string:   We isih vant ze dhuwit , Lebowski .
cocog: ^^ ^^^^^ ^^^^ ^^ ^^^^^ ^^^^^^^^  
( Tuladha ) Urutan [^ ]kudu cocog karo karakter apa wae sing dudu karakter spasi literal. Dadi kenapa iki ora cocog karo koma ,sawise dhuwit utawa titik " .sawise Lebowski? Iki amarga koma ,lan titik .dudu karakter tembung, mula wates digawe antarane karakter tembung lan karakter non-tembung. Padha katon ing antarane ypungkasan tembung. tembung dhuwit lan koma ,ing ngisor iki. lan antarane " itembung Lebowski lan titik .( titik / titik ) sing nderek. Ekspresi reguler cocog karo wates tembung kasebut (nanging ora ing karakter non-tembung sing mung mbantu nemtokake). Nanging apa sing kedadeyan yen kita ora kalebu konsistensi \bing cithakan kita?
pola: [^ ]+ 
senar:   Ve isih vant ze dhuwit, Lebowski. 
cocog: ^^ ^^^^^ ^^^^ ^^ ^^^^^^ ^^^^^^^^^  
( Conto ) Ya, saiki kita nemokake tandha-tandha iki uga. Saiki ayo gunakake wates tembung kanggo ndandani regex kanggo tembung sandhi sing dipetik:
pola: \"\b[^"]{0.5}\b\"|\"\b[^"]+\s[^"]*\b\" 
string:   "12345" "sandiku" " Xanadu. 2112" "su_do" "OfSalesmen!"
cocog: ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^  
( Conto ) Kanthi nempatake wates-wates tembung ing jero tanda petik ("\b ... \b"), kita kanthi efektif nyatakake yen karakter pisanan lan pungkasan saka tembung sandhi sing cocog kudu "karakter tembung". Dadi iki bisa digunakake kanthi apik, nanging ora bakal bisa digunakake yen karakter pisanan utawa pungkasan tembung sandhi pangguna dudu karakter tembung:
pola: \"\b[^"]{0,5}\b\"|\"\b[^"]+\s[^"]*\b\"
string: "thefollowingpasswordistooshort" "C++"
cocog:   
( Conto ) Delengen carane tembung sandhi kapindho ora ditandhani minangka "ora valid" sanajan cetha banget. Sampeyan kudungati-atikanthi urutan \b, amarga padha mung cocog wates antarane karakter \wlan ora \w. Ing conto ing ndhuwur, amarga kita ngidini karakter ora , ing tembung sandhi \w, wates antarane \lan karakter pisanan / pungkasan sandi ora dijamin dadi wates tembung \b.

Kanggo ngrampungake langkah iki, kita bakal ngrampungake mung siji masalah prasaja:

Watesan tembung migunani ing mesin nyorot sintaksis nalika kita pengin cocog karo urutan karakter tartamtu, nanging pengin mesthekake yen mung kedadeyan ing wiwitan utawa pungkasan tembung (utawa dhewe). Contone, kita nulis sintaksis lan pengin nyorot tembung var, nanging mung nalika katon dhewe (tanpa ndemek karakter liyane ing tembung kasebut). Apa sampeyan bisa nulis ekspresi reguler kanggo iki? Mesthi sampeyan bisa, iku tugas sing gampang banget;)
pola:
string:   var varx _var ( var j) barvarcar * var var -> { var }
cocog: ^^^ ^^^ ^^^ ^^^ ^^^  
( Solusi )

Langkah 15: "caret" ^minangka "wiwitan baris" lan tandha dolar $minangka "mburi baris"

20 langkah singkat kanggo nguwasani ekspresi reguler.  Bagean 3 - 6Urutan wates tembung \b(saka langkah pungkasan saka bagean sadurunge artikel) ora mung urutan jembar nol khusus sing kasedhiya kanggo digunakake ing ekspresi reguler. Loro sing paling populer yaiku "caret" ^- "wiwitan baris" lan tandha dolar $- "akhir baris". Kalebu salah siji saka iki ing ekspresi reguler tegese pertandhingan kasebut kudu katon ing wiwitan utawa pungkasan string sumber:
pola: ^start|end$ 
string:   wiwitan pungkasan wiwitan pungkasan wiwitan pungkasan wiwitan pungkasan 
cocog: ^^^^^ ^^^  
( Conto ) Yen senar sampeyan ngemot garis putus, ^startbakal cocog karo urutan "wiwitan" ing wiwitan baris, lan end$bakal cocog karo urutan "mburi" ing pungkasan baris (sanajan angel dituduhake ing kene). Simbol kasebut utamane migunani nalika nggarap data sing ngemot pembatas. Ayo bali menyang masalah "ukuran file" saka langkah 9 nggunakake ^"wiwitan baris". Ing conto iki, ukuran file kita dipisahake dening spasi " ". Dadi, kita pengin saben ukuran file diwiwiti kanthi nomer, didhisiki karakter spasi utawa wiwitan baris:
pola: (^| )(\d+|\d+\.\d+)[KMGT]B 
string:   6.6KB 1..3KB 12KB 5G 3.3MB KB .6.2TB 9MB .
cocog: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
kelompok:    222 122 1222 12    
( Tuladha ) Kita wis cedhak karo tujuane! Nanging sampeyan bisa uga sok dong mirsani yen kita isih duwe masalah cilik: kita cocog karo karakter spasi sadurunge ukuran file sing bener. Saiki kita mung bisa nglirwakake grup panangkepan iki (1) nalika mesin ekspresi reguler nemokake, utawa bisa nggunakake grup sing ora njupuk, sing bakal kita deleng ing langkah sabanjure.

Ing sawetoro wektu, ayo ngrampungake 2 masalah liyane kanggo nada:

Terusake conto panyorot sintaks saka langkah pungkasan, sawetara panyorot sintaks bakal menehi tandha spasi mburi, yaiku, spasi apa wae sing ana ing antarane karakter non-spasi putih lan pungkasan baris. Apa sampeyan bisa nulis regex kanggo nyorot mung spasi mburi?
pola:
string: myvec <- c(1, 2, 3, 4, 5)  
cocog:                          ^^^^^^  
( Solusi ) Parser nilai sing dipisahake koma (CSV) prasaja bakal nggoleki "token" sing dipisahake karo koma. Umumé, spasi ora ana teges kajaba diwengku ing tanda petik "". Tulis ekspresi reguler parsing CSV prasaja sing cocog karo token ing antarane koma, nanging nglirwakake (ora njupuk) spasi putih sing ora ana ing antarane kuotasi.
pola:
string:   a, "b", "c d",e,f, "g h", dfgi,, k, "", l 
cocog: ^^ ^^^^ ^^^^^^^^^^ ^^^ ^^^ ^^^^^^ ^^ ^^^ ^ 
klompok:    21 2221 2222212121 222221 222211 21 221 2    
( Solusi ) RegEx: 20 langkah singkat kanggo nguwasani ekspresi reguler. Bagean 4.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION