មាតិកា
កន្សោមធម្មតាគឺជាសមាសធាតុដ៏ពេញនិយមនៃភាសាសរសេរកម្មវិធីស្ទើរតែទាំងអស់។ ពួកគេជួយអ្នកឱ្យឆាប់ចូលប្រើព័ត៌មានដែលអ្នកត្រូវការ។ ជាពិសេសពួកវាត្រូវបានប្រើនៅពេលដែលវាចាំបាច់ដើម្បីដំណើរការអត្ថបទ។ Python ភ្ជាប់មកជាមួយម៉ូឌុលពិសេសតាមលំនាំដើម។ reដែលទទួលខុសត្រូវក្នុងការធ្វើការជាមួយកន្សោមធម្មតា។
ថ្ងៃនេះយើងនឹងនិយាយលម្អិតអំពីអ្វីដែលវាជាទូទៅរបៀបធ្វើការជាមួយពួកគេនិងរបៀបម៉ូឌុល re និងជួយ។
កន្សោមធម្មតា៖ សេចក្តីផ្តើម
តើការប្រើប្រាស់កន្សោមធម្មតាមានអ្វីខ្លះ? ស្ទើរតែទាំងអស់។ ឧទាហរណ៍ទាំងនេះ៖
- កម្មវិធីគេហទំព័រដែលទាមទារសុពលភាពអត្ថបទ។ ឧទាហរណ៍ធម្មតាគឺម៉ាស៊ីនភ្ញៀវសំបុត្រតាមអ៊ីនធឺណិត។
- គម្រោងផ្សេងទៀតដែលទាក់ទងនឹងអត្ថបទ មូលដ្ឋានទិន្នន័យ និងដូច្នេះនៅលើ។
មុនពេលយើងចាប់ផ្តើមញែកវាក្យសម្ព័ន្ធ យើងគួរតែយល់ឱ្យបានលម្អិតបន្ថែមទៀតអំពីគោលការណ៍ជាមូលដ្ឋាននៃមុខងាររបស់បណ្ណាល័យ។ re ហើយជាទូទៅអ្វីដែលល្អជាទូទៅអំពីវា។ យើងក៏នឹងផ្តល់ឧទាហរណ៍ពីការអនុវត្តជាក់ស្តែង ដែលយើងនឹងរៀបរាប់អំពីយន្តការនៃការប្រើប្រាស់របស់ពួកគេ។ អ្នកអាចបង្កើតគំរូបែបនេះ ដែលស័ក្តិសមសម្រាប់អ្នកក្នុងការធ្វើប្រតិបត្តិការច្រើនប្រភេទជាមួយនឹងអត្ថបទ។
តើអ្វីជាគំរូនៅក្នុងបណ្ណាល័យ Re?
ជាមួយវា អ្នកអាចស្វែងរកព័ត៌មាននៃប្រភេទផ្សេងៗ ទទួលបានព័ត៌មានដែលត្រូវគ្នានឹងពួកវា ដើម្បីធ្វើឱ្យមុខងារផ្សេងទៀតមានលក្ខណៈប្រែប្រួល។ ហើយជាការពិតណាស់ ដើម្បីដំណើរការទិន្នន័យនេះ។
ជាឧទាហរណ៍ សូមយកគំរូខាងក្រោម៖ s+. វាមានន័យថាតួអក្សរអវកាសណាមួយ។ ប្រសិនបើអ្នកបន្ថែមសញ្ញាបូកទៅវា នោះមានន័យថាលំនាំរួមបញ្ចូលចន្លោះច្រើនជាងមួយ។ វាថែមទាំងអាចផ្គូផ្គងតួអក្សរផ្ទាំងដែលត្រូវបានហៅជាមួយ t+.
មុនពេលប្រើពួកវា អ្នកត្រូវនាំចូលបណ្ណាល័យ Re. បន្ទាប់ពីនោះយើងប្រើពាក្យបញ្ជាពិសេសដើម្បីចងក្រងគំរូ។ នេះត្រូវបានធ្វើជាពីរជំហាន។
>>> នាំចូលឡើងវិញ
>>> regex = re.compile('s+')
ជាពិសេស កូដនេះអនុវត្តប្រតិបត្តិការនៃការចងក្រងគំរូដែលអាចប្រើបាន។ ឧទាហរណ៍ ដើម្បីស្វែងរកចន្លោះ (មួយ ឬច្រើន)។
ការទទួលបានព័ត៌មានដាច់ដោយឡែកពីខ្សែអក្សរផ្សេងគ្នាដោយប្រើកន្សោមធម្មតា។
ឧបមាថាយើងមានអថេរដែលមានព័ត៌មានខាងក្រោម។
>>> អត្ថបទ = """100 INF ព័ត៌មាន
213 MAT គណិតវិទ្យា
156 ENG ភាសាអង់គ្លេស»»»
វាមានវគ្គបណ្តុះបណ្តាលចំនួនបី។ ពួកវានីមួយៗមានបីផ្នែក - លេខ លេខកូដ និងឈ្មោះ។ យើងឃើញថាចន្លោះពេលរវាងពាក្យទាំងនេះគឺខុសគ្នា។ អ្វីដែលត្រូវធ្វើដើម្បីបំបែកបន្ទាត់នេះទៅជាលេខនិងពាក្យដាច់ដោយឡែក? មានវិធីពីរយ៉ាងដើម្បីសម្រេចគោលដៅនេះ៖
- ហៅមុខងារមួយ។ បំបែកឡើងវិញ.
- អនុវត្តមុខងារ បំបែក សម្រាប់ 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()
"
បន្ទាប់មកមានតែស្លាកបើកនឹងត្រូវបានរកឃើញ។
គំរូកន្សោមពេញនិយម
នេះគឺជាតារាងដែលមានលំនាំកន្សោមធម្មតាដែលប្រើជាទូទៅបំផុត។
សន្និដ្ឋាន
យើងបានពិចារណាតែវិធីសាស្រ្តជាមូលដ្ឋានបំផុតសម្រាប់ធ្វើការជាមួយកន្សោមធម្មតា។ ក្នុងករណីណាក៏ដោយអ្នកបានឃើញថាតើពួកគេមានសារៈសំខាន់យ៉ាងណា។ ហើយនៅទីនេះវាមិនមានអ្វីប្លែកទេថាតើវាចាំបាច់ដើម្បីញែកអត្ថបទទាំងមូល ឬបំណែកនីមួយៗរបស់វា ថាតើវាចាំបាច់ដើម្បីវិភាគការបង្ហោះនៅលើបណ្តាញសង្គម ឬប្រមូលទិន្នន័យដើម្បីដំណើរការវានៅពេលក្រោយ។ កន្សោមជាទៀងទាត់គឺជាជំនួយការដែលអាចទុកចិត្តបានក្នុងបញ្ហានេះ។
ពួកគេអនុញ្ញាតឱ្យអ្នកអនុវត្តភារកិច្ចដូចជា៖
- ការបញ្ជាក់ទម្រង់ទិន្នន័យ ដូចជាអាសយដ្ឋានអ៊ីមែល ឬលេខទូរស័ព្ទ។
- យកខ្សែមួយហើយបំបែកវាទៅជាខ្សែតូចៗជាច្រើន។
- អនុវត្តប្រតិបត្តិការផ្សេងៗជាមួយអត្ថបទ ដូចជាការស្វែងរក ការទាញយកព័ត៌មានចាំបាច់ ឬជំនួសផ្នែកនៃតួអក្សរ។
កន្សោមធម្មតាក៏អនុញ្ញាតឱ្យអ្នកអនុវត្តប្រតិបត្តិការដែលមិនសំខាន់ផងដែរ។ នៅ glance ដំបូង, ស្ទាត់ជំនាញវិទ្យាសាស្រ្តនេះគឺមិនងាយស្រួល។ ប៉ុន្តែនៅក្នុងការអនុវត្ត អ្វីគ្រប់យ៉ាងគឺមានលក្ខណៈស្តង់ដារ ដូច្នេះវាគ្រប់គ្រាន់ក្នុងការដោះស្រាយវាម្តង ហើយបន្ទាប់ពីនោះឧបករណ៍នេះអាចត្រូវបានប្រើមិនត្រឹមតែនៅក្នុង Python ប៉ុណ្ណោះទេប៉ុន្តែក៏ជាភាសាសរសេរកម្មវិធីផ្សេងទៀតផងដែរ។ សូម្បីតែ Excel ប្រើកន្សោមធម្មតាដើម្បីធ្វើឱ្យដំណើរការទិន្នន័យដោយស្វ័យប្រវត្តិ។ ដូច្នេះវាជាអំពើបាបដែលមិនប្រើឧបករណ៍នេះ។