ឯកសារសម្រាប់ម៉ូឌុល Re សម្រាប់ Python 3 in . ម៉ូឌុលឡើងវិញសម្រាប់កន្សោមធម្មតា។

កន្សោមធម្មតាគឺជាសមាសធាតុដ៏ពេញនិយមនៃភាសាសរសេរកម្មវិធីស្ទើរតែទាំងអស់។ ពួកគេជួយអ្នកឱ្យឆាប់ចូលប្រើព័ត៌មានដែលអ្នកត្រូវការ។ ជាពិសេសពួកវាត្រូវបានប្រើនៅពេលដែលវាចាំបាច់ដើម្បីដំណើរការអត្ថបទ។ Python ភ្ជាប់មកជាមួយម៉ូឌុលពិសេសតាមលំនាំដើម។ reដែលទទួលខុសត្រូវក្នុងការធ្វើការជាមួយកន្សោមធម្មតា។

ថ្ងៃនេះយើងនឹងនិយាយលម្អិតអំពីអ្វីដែលវាជាទូទៅរបៀបធ្វើការជាមួយពួកគេនិងរបៀបម៉ូឌុល re និង​ជួយ។

កន្សោមធម្មតា៖ សេចក្តីផ្តើម

តើការប្រើប្រាស់កន្សោមធម្មតាមានអ្វីខ្លះ? ស្ទើរតែទាំងអស់។ ឧទាហរណ៍ទាំងនេះ៖

  1. កម្មវិធីគេហទំព័រដែលទាមទារសុពលភាពអត្ថបទ។ ឧទាហរណ៍ធម្មតាគឺម៉ាស៊ីនភ្ញៀវសំបុត្រតាមអ៊ីនធឺណិត។
  2. គម្រោងផ្សេងទៀតដែលទាក់ទងនឹងអត្ថបទ មូលដ្ឋានទិន្នន័យ និងដូច្នេះនៅលើ។

មុនពេលយើងចាប់ផ្តើមញែកវាក្យសម្ព័ន្ធ យើងគួរតែយល់ឱ្យបានលម្អិតបន្ថែមទៀតអំពីគោលការណ៍ជាមូលដ្ឋាននៃមុខងាររបស់បណ្ណាល័យ។ re ហើយជាទូទៅអ្វីដែលល្អជាទូទៅអំពីវា។ យើងក៏នឹងផ្តល់ឧទាហរណ៍ពីការអនុវត្តជាក់ស្តែង ដែលយើងនឹងរៀបរាប់អំពីយន្តការនៃការប្រើប្រាស់របស់ពួកគេ។ អ្នក​អាច​បង្កើត​គំរូ​បែប​នេះ ដែល​ស័ក្តិសម​សម្រាប់​អ្នក​ក្នុង​ការ​ធ្វើ​ប្រតិបត្តិការ​ច្រើន​ប្រភេទ​ជាមួយ​នឹង​អត្ថបទ។

តើអ្វីជាគំរូនៅក្នុងបណ្ណាល័យ Re?

ជាមួយវា អ្នកអាចស្វែងរកព័ត៌មាននៃប្រភេទផ្សេងៗ ទទួលបានព័ត៌មានដែលត្រូវគ្នានឹងពួកវា ដើម្បីធ្វើឱ្យមុខងារផ្សេងទៀតមានលក្ខណៈប្រែប្រួល។ ហើយជាការពិតណាស់ ដើម្បីដំណើរការទិន្នន័យនេះ។

ជាឧទាហរណ៍ សូមយកគំរូខាងក្រោម៖ s+. វាមានន័យថាតួអក្សរអវកាសណាមួយ។ ប្រសិនបើអ្នកបន្ថែមសញ្ញាបូកទៅវា នោះមានន័យថាលំនាំរួមបញ្ចូលចន្លោះច្រើនជាងមួយ។ វាថែមទាំងអាចផ្គូផ្គងតួអក្សរផ្ទាំងដែលត្រូវបានហៅជាមួយ t+.

មុនពេលប្រើពួកវា អ្នកត្រូវនាំចូលបណ្ណាល័យ Re. បន្ទាប់ពីនោះយើងប្រើពាក្យបញ្ជាពិសេសដើម្បីចងក្រងគំរូ។ នេះត្រូវបានធ្វើជាពីរជំហាន។

>>> នាំចូលឡើងវិញ

>>> regex = re.compile('s+')

ជាពិសេស កូដនេះអនុវត្តប្រតិបត្តិការនៃការចងក្រងគំរូដែលអាចប្រើបាន។ ឧទាហរណ៍ ដើម្បីស្វែងរកចន្លោះ (មួយ ឬច្រើន)។

ការទទួលបានព័ត៌មានដាច់ដោយឡែកពីខ្សែអក្សរផ្សេងគ្នាដោយប្រើកន្សោមធម្មតា។

ឧបមាថាយើងមានអថេរដែលមានព័ត៌មានខាងក្រោម។

>>> អត្ថបទ = """100 INF ព័ត៌មាន

213 MAT គណិតវិទ្យា  

156 ENG ភាសាអង់គ្លេស»»»

វាមានវគ្គបណ្តុះបណ្តាលចំនួនបី។ ពួកវានីមួយៗមានបីផ្នែក - លេខ លេខកូដ និងឈ្មោះ។ យើងឃើញថាចន្លោះពេលរវាងពាក្យទាំងនេះគឺខុសគ្នា។ អ្វីដែលត្រូវធ្វើដើម្បីបំបែកបន្ទាត់នេះទៅជាលេខនិងពាក្យដាច់ដោយឡែក? មានវិធីពីរយ៉ាងដើម្បីសម្រេចគោលដៅនេះ៖

  1. ហៅមុខងារមួយ។ បំបែកឡើងវិញ.
  2. អនុវត្តមុខងារ បំបែក សម្រាប់ regex.

នេះគឺជាឧទាហរណ៍នៃការប្រើវាក្យសម្ព័ន្ធនៃវិធីសាស្រ្តនីមួយៗសម្រាប់អថេររបស់យើង។

>>> re.split('s+', text)  

# ឬ

>>> regex.split (អត្ថបទ)

លទ្ធផល៖ ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

ជាទូទៅវិធីសាស្រ្តទាំងពីរអាចត្រូវបានប្រើ។ ប៉ុន្តែតាមពិតទៅវាកាន់តែងាយស្រួលប្រើកន្សោមធម្មតាជំនួសឱ្យការប្រើមុខងារច្រើនដង។ បំបែកឡើងវិញ.

ស្វែងរកការប្រកួតដែលមានមុខងារបី

ឧបមាថាយើងត្រូវស្រង់តែលេខចេញពីខ្សែអក្សរ។ អ្វីដែលត្រូវធ្វើសម្រាប់ការនេះ?

re.findall()

នេះគឺជាករណីប្រើប្រាស់សម្រាប់មុខងារ findall()ដែលរួមជាមួយនឹងកន្សោមធម្មតា អនុញ្ញាតឱ្យអ្នកទាញយកការកើតឡើងនៃលេខមួយ ឬច្រើនពីអថេរអត្ថបទ។

>>> បោះពុម្ព (អត្ថបទ)  

100 INF ព័ត៌មាន

213 MAT គណិតវិទ្យា  

156 ENG ភាសាអង់គ្លេស

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(អត្ថបទ)  

['100', '213', '156']

រួមគ្នាជាមួយនិមិត្តសញ្ញា d យើងបានប្រើគំរូដែលបង្ហាញពីតម្លៃជាលេខណាមួយដែលមាននៅក្នុងអថេរ ឬអត្ថបទ។ ហើយចាប់តាំងពីយើងបានបន្ថែមលេខមួយ + នៅទីនោះ នេះមានន័យថាយ៉ាងហោចណាស់លេខមួយត្រូវតែមានវត្តមាន។ 

អ្នក​ក៏​អាច​ប្រើ​សញ្ញា * ដើម្បី​បញ្ជាក់​ថា​វត្តមាន​នៃ​ខ្ទង់​មិន​ត្រូវ​បាន​ទាមទារ​សម្រាប់​ការ​ប្រកួត​ត្រូវ​បាន​រក​ឃើញ។

ប៉ុន្តែក្នុងករណីរបស់យើងចាប់តាំងពីយើងប្រើ + យើងបានស្រង់ចេញជាមួយ findall() ការរចនាឌីជីថល 1 ឬច្រើននៃវគ្គសិក្សាពីអត្ថបទ។ ដូច្នេះក្នុងករណីរបស់យើង កន្សោមធម្មតាដើរតួជាការកំណត់សម្រាប់មុខងារ។

re.search() ទល់នឹង re.match()

ដូចដែលអ្នកអាចទាយបានពីឈ្មោះមុខងារ ទីមួយស្វែងរកការផ្គូផ្គងក្នុងអត្ថបទ។ សំណួរ៖ តើអ្វីជាភាពខុសគ្នារវាង រកបាន? ចំណុចនោះគឺថាវាត្រឡប់វត្ថុជាក់លាក់មួយដែលត្រូវគ្នានឹងលំនាំ ហើយមិនមែនជាលំដាប់ទាំងមូលនៃលទ្ធផលដែលបានរកឃើញក្នុងទម្រង់នៃបញ្ជី ដូចជាមុខងារមុននោះទេ។

នៅក្នុងវេន មុខងារ re.match ធ្វើដូចគ្នា។ មានតែវាក្យសម្ព័ន្ធប៉ុណ្ណោះដែលខុសគ្នា។ គំរូត្រូវតែដាក់នៅដើម។ 

សូមលើកឧទាហរណ៍មួយដែលបង្ហាញអំពីរឿងនេះ។

>>> # បង្កើតអថេរជាមួយអត្ថបទ

>>> text2 = «»»INF ព័ត៌មាន

213 MAT គណិតវិទ្យា 156″»»  

>>> # ចងក្រង regex ហើយរកមើលលំនាំ

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('First index:', s.start())  

>>> បោះពុម្ព('លិបិក្រមចុងក្រោយ៖', s.end())  

>>> print(text2[s.start():s.end()]) 

សន្ទស្សន៍ទីមួយ៖ ១៧ 

សន្ទស្សន៍ចុងក្រោយ៖ ២០

213

ប្រសិនបើអ្នកចង់ទទួលបានលទ្ធផលស្រដៀងគ្នានៅក្នុងវិធីផ្សេងគ្នាអ្នកអាចប្រើមុខងារ ក្រុម().

ការជំនួសផ្នែកនៃអត្ថបទដោយប្រើបណ្ណាល័យ Re

ដើម្បីជំនួសអត្ថបទ សូមប្រើមុខងារ re.sub() ឧបមាថាបញ្ជីវគ្គសិក្សារបស់យើងបានផ្លាស់ប្តូរបន្តិចបន្តួច។ យើងឃើញថាបន្ទាប់ពីតម្លៃឌីជីថលនីមួយៗ យើងមានផ្ទាំងមួយ។ ភារកិច្ចរបស់យើងគឺបញ្ចូលគ្នានូវលំដាប់ទាំងអស់នេះទៅក្នុងបន្ទាត់មួយ។ ដើម្បីធ្វើដូចនេះយើងត្រូវជំនួសកន្សោម s + ដើម្បីហុច 

អត្ថបទដើមគឺ៖

# បង្កើតអថេរជាមួយអត្ថបទ

>>> អត្ថបទ = """100 INF t ព័ត៌មានវិទ្យា

213 MAT t គណិតវិទ្យា  

156 ENG t ភាសាអង់គ្លេស»»»  

>>> បោះពុម្ព (អត្ថបទ)  

៧៥.៥៧៤.២០១២ ព័ត៌មាន វិទ្យាសាស្ត្រកុំព្យូទ័រ។

១.២៦៤.០៧២.៤៦១ ម៉ែត គណិតវិទ្យា  

156 អេង ភាសាអង់គ្លេស

ដើម្បីអនុវត្តប្រតិបត្តិការដែលចង់បាន យើងបានប្រើបន្ទាត់កូដខាងក្រោម។

# ជំនួសចន្លោះមួយ ឬច្រើនដោយ 1

>>> regex = re.compile('s+')  

>>> បោះពុម្ព (regex.sub(' ', អត្ថបទ))  

ជាលទ្ធផលយើងមានបន្ទាត់មួយ។ 

101 COM កុំព្យូទ័រ 205 MAT គណិតវិទ្យា 189 ENG English

ឥឡូវពិចារណាបញ្ហាមួយទៀត។ យើង​មិន​ប្រឈម​មុខ​នឹង​ការ​ដាក់​កន្លែង​ទំនេរ​ទេ។ វាមានសារៈសំខាន់ជាងសម្រាប់យើងដែលឈ្មោះវគ្គសិក្សាទាំងអស់ចាប់ផ្តើមនៅលើបន្ទាត់ថ្មី។ ដើម្បីធ្វើដូច្នេះ កន្សោមមួយទៀតត្រូវបានប្រើដែលបន្ថែមបន្ទាត់ថ្មីទៅករណីលើកលែង។ តើនេះជាការបញ្ចេញមតិបែបណា?

បណ្ណាល័យ Re គាំទ្រលក្ខណៈពិសេសដូចជាការផ្គូផ្គងអវិជ្ជមាន។ វា​ខុស​គ្នា​ពី​ពាក្យ​ផ្ទាល់​ដែល​វា​មាន​សញ្ញាឧទាន​នៅ​ពី​មុខ​សញ្ញា​ដក។ នោះគឺប្រសិនបើយើងត្រូវការរំលងតួអក្សរបន្ទាត់ថ្មីនោះ យើងត្រូវសរសេរ !n ជំនួសឱ្យ n ។

យើងទទួលបានលេខកូដខាងក្រោម។

# ដកដកឃ្លាទាំងអស់ចេញ លើកលែងតែបន្ទាត់ថ្មី។  

>>> regex = re.compile('((?!n)s+)')  

>>> បោះពុម្ព (regex.sub(' ', អត្ថបទ))  

100 INF ព័ត៌មាន

213 MAT គណិតវិទ្យា  

156 ENG ភាសាអង់គ្លេស

តើក្រុមបញ្ចេញមតិធម្មតាជាអ្វី?

ដោយមានជំនួយពីក្រុមនៃកន្សោមធម្មតាយើងអាចទទួលបានវត្ថុដែលចង់បាននៅក្នុងទម្រង់នៃធាតុដាច់ដោយឡែកហើយមិនមែននៅក្នុងបន្ទាត់តែមួយទេ។ 

ឧបមាថាយើងត្រូវទទួលបានលេខវគ្គសិក្សា លេខកូដ និងឈ្មោះមិនមែននៅក្នុងបន្ទាត់មួយទេ ប៉ុន្តែជាធាតុដាច់ដោយឡែក។ ដើម្បីបញ្ចប់កិច្ចការ អ្នកនឹងត្រូវសរសេរកូដមួយចំនួនធំដែលមិនចាំបាច់។ 

តាមការពិត កិច្ចការអាចងាយស្រួលបានច្រើន។ អ្នកអាចចងក្រងគំរូសម្រាប់ធាតុទាំងអស់ ហើយគ្រាន់តែបញ្ជាក់ទិន្នន័យដែលអ្នកត្រូវការដើម្បីទទួលបានពីតង្កៀប។

វានឹងមានបន្ទាត់តិចតួចណាស់។ 

# បង្កើតក្រុមនៃគំរូអត្ថបទវគ្គសិក្សា ហើយស្រង់ពួកវា

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'វិទ្យាសាស្ត្រកុំព្យូទ័រ'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

គំនិតនៃការផ្គូផ្គង "លោភលន់"

តាមស្តង់ដារ កន្សោមធម្មតាត្រូវបានកម្មវិធីដើម្បីទាញយកចំនួនអតិបរមានៃទិន្នន័យដែលត្រូវគ្នា។ ហើយទោះបីជាអ្នកត្រូវការតិចក៏ដោយ។

សូមក្រឡេកមើលគំរូកូដ HTML ដែលយើងត្រូវទទួលបានស្លាក។

>>> text = "ឧទាហរណ៍នៃការផ្គូផ្គងការបញ្ចេញមតិធម្មតាដែលលោភលន់"  

>>> re.findall('', អត្ថបទ)  

['ឧទាហរណ៍នៃការផ្គូផ្គងការបញ្ចេញមតិធម្មតាដែលលោភលន់']

ជំនួសឱ្យការស្រង់ចេញស្លាកតែមួយ Python ទទួលបានខ្សែអក្សរទាំងមូល។ ហេតុ​នេះ​ហើយ​បាន​ជា​គេ​ហៅ​ថា​លោភលន់។

ហើយ​ត្រូវ​ធ្វើ​ដូចម្តេច​ដើម្បី​បាន​តែ​ស្លាក​? ក្នុងករណីនេះអ្នកត្រូវប្រើការផ្គូផ្គងខ្ជិល។ ដើម្បីបញ្ជាក់កន្សោមបែបនេះ សញ្ញាសួរត្រូវបានបន្ថែមទៅចុងបញ្ចប់នៃគំរូ។

អ្នកនឹងទទួលបានលេខកូដខាងក្រោម និងលទ្ធផលរបស់អ្នកបកប្រែ។

>>> re.findall('', អត្ថបទ)  

[”,”]

ប្រសិនបើវាត្រូវបានគេតម្រូវឱ្យទទួលបានតែការជួបលើកដំបូងទេនោះវិធីសាស្ត្រត្រូវបានប្រើ ស្វែងរក ().

re.search('', text).group()  

"

បន្ទាប់មកមានតែស្លាកបើកនឹងត្រូវបានរកឃើញ។

គំរូកន្សោមពេញនិយម

នេះគឺជាតារាងដែលមានលំនាំកន្សោមធម្មតាដែលប្រើជាទូទៅបំផុត។

ឯកសារសម្រាប់ម៉ូឌុល Re សម្រាប់ Python 3 in . ម៉ូឌុលឡើងវិញសម្រាប់កន្សោមធម្មតា។

សន្និដ្ឋាន

យើងបានពិចារណាតែវិធីសាស្រ្តជាមូលដ្ឋានបំផុតសម្រាប់ធ្វើការជាមួយកន្សោមធម្មតា។ ក្នុងករណីណាក៏ដោយអ្នកបានឃើញថាតើពួកគេមានសារៈសំខាន់យ៉ាងណា។ ហើយនៅទីនេះវាមិនមានអ្វីប្លែកទេថាតើវាចាំបាច់ដើម្បីញែកអត្ថបទទាំងមូល ឬបំណែកនីមួយៗរបស់វា ថាតើវាចាំបាច់ដើម្បីវិភាគការបង្ហោះនៅលើបណ្តាញសង្គម ឬប្រមូលទិន្នន័យដើម្បីដំណើរការវានៅពេលក្រោយ។ កន្សោមជាទៀងទាត់គឺជាជំនួយការដែលអាចទុកចិត្តបានក្នុងបញ្ហានេះ។

ពួកគេអនុញ្ញាតឱ្យអ្នកអនុវត្តភារកិច្ចដូចជា៖

  1. ការបញ្ជាក់ទម្រង់ទិន្នន័យ ដូចជាអាសយដ្ឋានអ៊ីមែល ឬលេខទូរស័ព្ទ។
  2. យកខ្សែមួយហើយបំបែកវាទៅជាខ្សែតូចៗជាច្រើន។
  3. អនុវត្តប្រតិបត្តិការផ្សេងៗជាមួយអត្ថបទ ដូចជាការស្វែងរក ការទាញយកព័ត៌មានចាំបាច់ ឬជំនួសផ្នែកនៃតួអក្សរ។

កន្សោមធម្មតាក៏អនុញ្ញាតឱ្យអ្នកអនុវត្តប្រតិបត្តិការដែលមិនសំខាន់ផងដែរ។ នៅ glance ដំបូង, ស្ទាត់ជំនាញវិទ្យាសាស្រ្តនេះគឺមិនងាយស្រួល។ ប៉ុន្តែនៅក្នុងការអនុវត្ត អ្វីគ្រប់យ៉ាងគឺមានលក្ខណៈស្តង់ដារ ដូច្នេះវាគ្រប់គ្រាន់ក្នុងការដោះស្រាយវាម្តង ហើយបន្ទាប់ពីនោះឧបករណ៍នេះអាចត្រូវបានប្រើមិនត្រឹមតែនៅក្នុង Python ប៉ុណ្ណោះទេប៉ុន្តែក៏ជាភាសាសរសេរកម្មវិធីផ្សេងទៀតផងដែរ។ សូម្បីតែ Excel ប្រើកន្សោមធម្មតាដើម្បីធ្វើឱ្យដំណើរការទិន្នន័យដោយស្វ័យប្រវត្តិ។ ដូច្នេះ​វា​ជា​អំពើ​បាប​ដែល​មិន​ប្រើ​ឧបករណ៍​នេះ។

សូមផ្ដល់យោបល់