តារាងមាតិកា
នៅក្នុងមេរៀននេះ អ្នកនឹងរៀនពីរបៀបប្រើកន្សោមធម្មតានៅក្នុង Excel ដើម្បីស្វែងរក និងស្រង់ខ្សែអក្សររងដែលត្រូវគ្នានឹងលំនាំដែលបានផ្តល់ឱ្យ។
Microsoft Excel ផ្តល់នូវមុខងារមួយចំនួនដើម្បីស្រង់អត្ថបទ ពីកោសិកា។ មុខងារទាំងនោះអាចទប់ទល់នឹងបញ្ហាប្រឈមក្នុងការទាញយកខ្សែអក្សរភាគច្រើននៅក្នុងសន្លឹកកិច្ចការរបស់អ្នក។ ភាគច្រើន ប៉ុន្តែមិនមែនទាំងអស់ទេ។ នៅពេលដែលមុខងារអត្ថបទជំពប់ដួល កន្សោមធម្មតាមកជួយសង្គ្រោះ។ រង់ចាំ… Excel មិនមានមុខងារ RegEx ទេ! ពិតហើយ គ្មានមុខងារដែលមានស្រាប់។ ប៉ុន្តែគ្មានអ្វីដែលអាចរារាំងអ្នកពីការប្រើប្រាស់ផ្ទាល់ខ្លួនរបស់អ្នកទេ :)
មុខងារ Excel VBA Regex ដើម្បីស្រង់ខ្សែអក្សរ
ដើម្បីបន្ថែមមុខងារ Regex Extract ផ្ទាល់ខ្លួនទៅ Excel របស់អ្នក បិទភ្ជាប់កូដខាងក្រោមនៅក្នុងកម្មវិធីនិពន្ធ VBA ។ ដើម្បីបើកកន្សោមធម្មតានៅក្នុង VBA យើងកំពុងប្រើវត្ថុ Microsoft RegExp ដែលភ្ជាប់មកជាមួយ។
មុខងារសាធារណៈ RegExpExtract(អត្ថបទជា String លំនាំជា String ជំរើស instance_num ជាចំនួនគត់ = 0 ស្រេចចិត្ត match_case As Boolean = True ) Dim text_matches() As String Dim matches_index As Integer On Error GoTo ErrHandl RegExpExtract = "" Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = pattern regex.Global = True regex.MultiLine = True If True = match_case បន្ទាប់មក regex. ignorecase = False Else regex.ignorecase = True End If Set matches = regex.Execute(text) ប្រសិនបើ 0 < matches.Count Then If (0 = instance_num) Then ReDim text_matches(matches.Count - 1, 0) សម្រាប់ matches_index = 0 ទៅVBA RegExp ខ្ញុំលើកទឹកចិត្តអ្នកឱ្យអានផ្នែកបន្ទាប់ដែលពិភាក្សាអំពីមុខងារ .NET Regex ដែលមានអនុភាពច្រើន។មុខងារ Regex ដែលមានមូលដ្ឋានលើ .NET ផ្ទាល់ខ្លួន ដើម្បីស្រង់អត្ថបទក្នុង Excel
មិនដូចមុខងារ VBA RegExp ដែល អាចត្រូវបានសរសេរដោយអ្នកប្រើប្រាស់ Excel ណាក៏ដោយ .NET RegEx គឺជាអាណាចក្ររបស់អ្នកអភិវឌ្ឍន៍។ Microsoft .NET Framework គាំទ្រវាក្យសម្ព័ន្ធកន្សោមធម្មតាដែលមានលក្ខណៈពេញលេញដែលត្រូវគ្នាជាមួយ Perl 5។ អត្ថបទនេះនឹងមិនបង្រៀនអ្នកពីរបៀបសរសេរមុខងារបែបនេះទេ (ខ្ញុំមិនមែនជាអ្នកសរសេរកម្មវិធីទេ ហើយមិនមានគំនិតតិចតួចបំផុតអំពីរបៀបធ្វើវា :)
មុខងារដ៏មានអានុភាពចំនួនបួនដែលត្រូវបានដំណើរការដោយម៉ាស៊ីន .NET RegEx ស្តង់ដារត្រូវបានសរសេររួចហើយដោយអ្នកអភិវឌ្ឍន៍របស់យើង ហើយរួមបញ្ចូលនៅក្នុង Ultimate Suite។ ខាងក្រោមនេះ យើងនឹងបង្ហាញពីការប្រើប្រាស់ជាក់ស្តែងមួយចំនួននៃមុខងារដែលត្រូវបានរចនាឡើងជាពិសេសសម្រាប់ការស្រង់អត្ថបទក្នុង Excel។
គន្លឹះ។ សម្រាប់ព័ត៌មានអំពីវាក្យសម្ព័ន្ធ .NET Regex សូមយោងទៅ .NET Regular Expression Language ។
របៀបដកឃ្លាចេញក្នុង Excel ដោយប្រើកន្សោមធម្មតា
សន្មត់ថាអ្នកបានដំឡើងកំណែ Ultimate Suite ចុងក្រោយបង្អស់ ការស្រង់អត្ថបទដោយប្រើកន្សោមធម្មតានឹងធ្លាក់ចុះដល់ជំហានពីរនេះ៖
- នៅលើផ្ទាំង Ablebits Data ក្នុងក្រុម Text ចុច Regex Tools ។
- នៅលើបន្ទះ ឧបករណ៍ Regex សូមជ្រើសរើសទិន្នន័យប្រភព បញ្ចូលលំនាំ Regex របស់អ្នក ហើយជ្រើសរើសជម្រើស Extract ។ ដើម្បីទទួលបានលទ្ធផលជាមុខងារផ្ទាល់ខ្លួន មិនមែនជាតម្លៃទេ សូមជ្រើសរើស Insert as a formula checkប្រអប់។ នៅពេលរួចរាល់ សូមចុចប៊ូតុង Extract ។
លទ្ធផលនឹងបង្ហាញក្នុងជួរឈរថ្មីនៅខាងស្តាំទិន្នន័យដើមរបស់អ្នក៖
វាក្យសម្ព័ន្ធ AblebitsRegexExtract
មុខងារផ្ទាល់ខ្លួនរបស់យើងមានវាក្យសម្ព័ន្ធដូចខាងក្រោម៖
AblebitsRegexExtract(reference, regular_expression)Where:
- Reference (required) - សេចក្តីយោងទៅកាន់ក្រឡាដែលមានខ្សែអក្សរប្រភព។
- Regular_expression (ទាមទារ) - លំនាំ regex ដែលត្រូវនឹង។
ចំណាំសំខាន់! មុខងារនេះដំណើរការតែលើម៉ាស៊ីនដែលដំឡើង Ultimate Suite for Excel ប៉ុណ្ណោះ។
កំណត់ចំណាំការប្រើប្រាស់
ដើម្បីធ្វើឱ្យខ្សែកោងការរៀនរបស់អ្នកកាន់តែរលូន និងបទពិសោធន៍របស់អ្នកកាន់តែរីករាយ សូមយកចិត្តទុកដាក់លើចំណុចទាំងនេះ៖
- ដើម្បីបង្កើតរូបមន្ត អ្នកអាចប្រើ ឧបករណ៍ Regex របស់យើង ឬប្រអប់ បញ្ចូលមុខងារ របស់ Excel ឬវាយឈ្មោះមុខងារពេញលេញក្នុងក្រឡាមួយ។ នៅពេលដែលរូបមន្តត្រូវបានបញ្ចូល អ្នកអាចគ្រប់គ្រងវាបាន (កែសម្រួល ចម្លង ឬផ្លាស់ទី) ដូចរូបមន្តដើមណាមួយ។
- លំនាំដែលអ្នកបញ្ចូលនៅលើបន្ទះ ឧបករណ៍ Regex ទៅអាគុយម៉ង់ទី 2 ។ វាក៏អាចធ្វើទៅបានដើម្បីរក្សាកន្សោមធម្មតានៅក្នុងក្រឡាដាច់ដោយឡែកមួយ។ ក្នុងករណីនេះ គ្រាន់តែប្រើឯកសារយោងក្រឡាសម្រាប់អាគុយម៉ង់ទី 2។
- មុខងារដកការផ្គូផ្គង ដែលបានរកឃើញដំបូង ។
- តាមលំនាំដើម មុខងារគឺ ករណី -sensitive ។ សម្រាប់ការផ្គូផ្គងអក្សរតូចធំ ប្រើលំនាំ (?i)។
- ប្រសិនបើការផ្គូផ្គងមិនត្រូវបានរកឃើញទេ កំហុស #N/A គឺត្រឡប់មកវិញ។
Regex ដើម្បីស្រង់ខ្សែអក្សររវាងតួអក្សរពីរ
ដើម្បីទទួលបានអត្ថបទរវាងតួអក្សរពីរ អ្នកអាចប្រើទាំងក្រុមចាប់យក ឬមើលជុំវិញ។
តោះ និយាយថាអ្នកកំពុងស្វែងរកការដកស្រង់អត្ថបទរវាងតង្កៀប។ ការចាប់យកក្រុមគឺជាវិធីងាយស្រួលបំផុត។
លំនាំ 1 : \[(.*?)\]
ជាមួយនឹងការមើលទៅក្រោយវិជ្ជមាន និងមើលទៅខាងមុខ លទ្ធផលនឹងពិតប្រាកដ ដូចគ្នា។
លំនាំ 2 : (?<=\[) (.*?)(?=\])
សូមយកចិត្តទុកដាក់ថាក្រុមថតរបស់យើង (.*?) អនុវត្ត ការស្វែងរកខ្ជិល សម្រាប់អត្ថបទរវាងតង្កៀបពីរ - ពីដំបូង [ទៅទីមួយ]។ ក្រុមចាប់យកដោយគ្មានសញ្ញាសួរ (.*) នឹងធ្វើការ ការស្វែងរកដោយលោភលន់ ហើយចាប់យកអ្វីគ្រប់យ៉ាងពីដំបូង [ ដល់ចុងក្រោយ ]។
ជាមួយនឹងលំនាំនៅក្នុង A2 រូបមន្តនឹងទៅជា ដូចតទៅ៖
=AblebitsRegexExtract(A5, $A$2)
របៀបដើម្បីទទួលបានការប្រកួតទាំងអស់
ដូចដែលបានរៀបរាប់រួចមកហើយ មុខងារ AblebitsRegexExtract អាចទាញយកការប្រកួតតែមួយប៉ុណ្ណោះ។ ដើម្បីទទួលបានការប្រកួតទាំងអស់ អ្នកអាចប្រើមុខងារ VBA ដែលយើងបានពិភាក្សាពីមុន។ ទោះយ៉ាងណាក៏ដោយ មានការព្រមានមួយ - VBA RegExp មិនគាំទ្រការចាប់យកក្រុមទេ ដូច្នេះលំនាំខាងលើនឹងបង្ហាញតួអក្សរ "ព្រំដែន" មកវិញផងដែរ តង្កៀបនៅក្នុងករណីរបស់យើង។
=TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))
ដើម្បីកម្ចាត់ នៃតង្កៀប ជំនួសពួកវាដោយខ្សែអក្សរទទេ ("") ដោយប្រើរូបមន្តនេះ៖
=SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")
សម្រាប់ការអានកាន់តែប្រសើរ យើងកំពុងប្រើសញ្ញាក្បៀសសម្រាប់កំណត់ព្រំដែន។
Regex ដើម្បីស្រង់អត្ថបទរវាងខ្សែអក្សរពីរ
វិធីសាស្រ្តដែលយើងបានដំណើរការបកប្រែវាតាមព្យញ្ជនៈ)។
អាស្រ័យលើកន្សោមធម្មតាដែលត្រូវបានបញ្ចូលក្នុង A2 រូបមន្តខាងក្រោមនឹងបង្កើតលទ្ធផលខុសៗគ្នា៖
=AblebitsRegexExtract(A5, $A$2)
Regex ដើម្បីស្រង់ចេញ ឈ្មោះដែនពេញ ជាមួយនឹងដែនរងទាំងអស់៖
Regex ដើម្បីស្រង់ចេញ កម្រិតទីពីរ ដែន ដោយគ្មានដែនរង៖
នោះជារបៀបស្រង់ផ្នែកនៃអត្ថបទក្នុង Excel ដោយប្រើកន្សោមធម្មតា។ ខ្ញុំសូមអរគុណចំពោះការអាន ហើយទន្ទឹងរង់ចាំជួបអ្នកនៅលើប្លក់របស់យើងនៅសប្តាហ៍ក្រោយ!
ការទាញយកដែលមាន
Excel Regex Extract example (.xlsm file)
Ultimate Suite កំណែសាកល្បង (ឯកសារ .exe)
\b(0?[0-9]matches.Count - 1 text_matches(matches_index, 0) = matches.Item(matches_index) Next matches_index RegExpExtract = text_matches Else RegExpExtract = matches.Item(instance_num - 1) End If End If Exit Function ErrHandl: RegExpExtract = ErrVuex(CVErrx)ប្រសិនបើអ្នកមានបទពិសោធន៍តិចតួចជាមួយ VBA ការណែនាំអ្នកប្រើប្រាស់ជាជំហានៗអាចមានប្រយោជន៍៖ របៀបបញ្ចូលកូដ VBA ក្នុង Excel។
ចំណាំ។ ដើម្បីឱ្យមុខងារដំណើរការ ត្រូវប្រាកដថារក្សាទុកឯកសាររបស់អ្នកជា សៀវភៅការងារដែលបានបើកម៉ាក្រូ (.xlsm)។
វាក្យសម្ព័ន្ធ RegExpExtract
មុខងារ RegExpExtract ស្វែងរកខ្សែអក្សរបញ្ចូលសម្រាប់តម្លៃដែលត្រូវគ្នានឹងកន្សោមធម្មតា ហើយស្រង់ចេញពីការផ្គូផ្គងមួយ ឬទាំងអស់។
មុខងារមានវាក្យសម្ព័ន្ធដូចខាងក្រោម :
RegExpExtract(text, pattern, [instance_num], [match_case])Where:
- Text (required) - ខ្សែអក្សរអត្ថបទដែលត្រូវស្វែងរក។
- លំនាំ (ទាមទារ) - កន្សោមធម្មតាដែលត្រូវគ្នា។ នៅពេលដែលបានផ្គត់ផ្គង់ដោយផ្ទាល់ក្នុងរូបមន្ត គំរូគួរត្រូវបានរុំព័ទ្ធដោយសញ្ញាសម្រង់ទ្វេ។
- Instance_num (ជាជម្រើស) - លេខសៀរៀលដែលបង្ហាញថាវត្ថុណាមួយដែលត្រូវស្រង់ចេញ។ ប្រសិនបើលុបចោល ត្រឡប់ការផ្គូផ្គងដែលបានរកឃើញទាំងអស់ (លំនាំដើម)។
- Match_case (ជាជម្រើស) - កំណត់ថាតើត្រូវគ្នា ឬមិនអើពើករណីអត្ថបទ។ ប្រសិនបើពិត ឬលុបចោល (លំនាំដើម) ការផ្គូផ្គងអក្សរតូចធំត្រូវបានអនុវត្ត។ ប្រសិនបើ FALSE - មិនប្រកាន់អក្សរតូចធំ។
មុខងារនេះដំណើរការនៅគ្រប់កំណែទាំងអស់នៃ Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 និង Excel 2010។
4 អ្វីដែលអ្នកគួរដឹងអំពី RegExpExtract
ដើម្បីប្រើប្រាស់មុខងារក្នុង Excel របស់អ្នកប្រកបដោយប្រសិទ្ធភាព មានចំណុចសំខាន់មួយចំនួនដែលត្រូវកត់សម្គាល់៖
- តាមលំនាំដើម មុខងារត្រឡប់ ការផ្គូផ្គងដែលបានរកឃើញទាំងអស់ ទៅក្នុងក្រឡាជិតខាង ដូចបានបង្ហាញក្នុងឧទាហរណ៍នេះ។ ដើម្បីទទួលបានការកើតឡើងជាក់លាក់ សូមផ្តល់លេខដែលត្រូវគ្នាទៅនឹងអាគុយម៉ង់ instance_num ។
- តាមលំនាំដើម មុខងារគឺ ប្រកាន់អក្សរតូចធំ ។ សម្រាប់ការផ្គូផ្គងដែលមិនប្រកាន់អក្សរតូចធំ សូមកំណត់អាគុយម៉ង់ match_case ទៅ FALSE។ ដោយសារតែការកំណត់ VBA នោះ សំណង់ដែលប្រកាន់អក្សរតូចធំ (?i) នឹងមិនដំណើរការទេ។
- ប្រសិនបើ លំនាំត្រឹមត្រូវមិនត្រូវបានរកឃើញ នោះមុខងារនឹងមិនត្រឡប់អ្វីទាំងអស់ (ខ្សែអក្សរទទេ)<។ 13>
- ប្រសិនបើ លំនាំមិនត្រឹមត្រូវ នោះ #VALUE! កំហុសកើតឡើង។
មុនពេលអ្នកចាប់ផ្តើមប្រើមុខងារផ្ទាល់ខ្លួននេះនៅក្នុងសន្លឹកកិច្ចការរបស់អ្នក អ្នកត្រូវយល់ពីអ្វីដែលវាមានសមត្ថភាពមែនទេ? ឧទាហរណ៍ខាងក្រោមគ្របដណ្តប់ករណីប្រើប្រាស់ទូទៅមួយចំនួន ហើយពន្យល់ពីមូលហេតុដែលឥរិយាបថអាចខុសគ្នានៅក្នុង Dynamic Array Excel (Microsoft 365 និង Excel 2021) និង Excel ប្រពៃណី (ឆ្នាំ 2019 និងកំណែចាស់ជាងនេះ)។
ចំណាំ។ ចេញឧទាហរណ៍ regex ត្រូវបានសរសេរសម្រាប់សំណុំទិន្នន័យសាមញ្ញ។ យើងមិនអាចធានាថាពួកគេនឹងដំណើរការដោយគ្មានកំហុសនៅក្នុងសន្លឹកកិច្ចការពិតប្រាកដរបស់អ្នក។ អ្នកដែលមានបទពិសោធន៍ជាមួយ regex នឹងយល់ស្របថាការសរសេរកន្សោមធម្មតាគឺជាផ្លូវដែលគ្មានទីបញ្ចប់ទៅកាន់ភាពល្អឥតខ្ចោះ - ស្ទើរតែតែងតែមានវិធីដើម្បីធ្វើឱ្យវាកាន់តែឆើតឆាយ ឬមានសមត្ថភាពគ្រប់គ្រងជួរទិន្នន័យបញ្ចូលកាន់តែទូលំទូលាយ។
Regex ដើម្បីស្រង់លេខចេញពីខ្សែអក្សរ
ដោយធ្វើតាមមូលដ្ឋានអតិបរមានៃការបង្រៀន "ពីសាមញ្ញទៅស្មុគស្មាញ" យើងនឹងចាប់ផ្តើមជាមួយករណីសាមញ្ញបំផុត៖ ការស្រង់លេខចេញពីខ្សែអក្សរ។
The រឿងដំបូងសម្រាប់អ្នកក្នុងការសម្រេចចិត្តគឺលេខមួយណាដែលត្រូវទៅយក៖ ដំបូង ចុងក្រោយ ការកើតឡើងជាក់លាក់ ឬលេខទាំងអស់។
ដកលេខដំបូង
នេះគឺសាមញ្ញដូច regex អាចទទួលបាន។ ដោយគិតថា \d មានន័យថាខ្ទង់ណាមួយពី 0 ទៅ 9 ហើយ + មានន័យថាមួយ ឬច្រើនដង កន្សោមធម្មតារបស់យើងយកទម្រង់នេះ៖
លំនាំ : \d+
កំណត់ instance_num ទៅ 1 ហើយអ្នកនឹងទទួលបានលទ្ធផលដែលចង់បាន៖
=RegExpExtract(A5, "\d+", 1)
កន្លែងដែល A5 ជាខ្សែអក្សរដើម។
ដើម្បីភាពងាយស្រួល អ្នកអាចបញ្ចូល លំនាំនៅក្នុងក្រឡាដែលបានកំណត់ជាមុន ($A$2) ហើយចាក់សោអាសយដ្ឋានរបស់វាដោយសញ្ញា $:
=RegExpExtract(A5, $A$2, 1)
ទទួលបានលេខចុងក្រោយ
ដើម្បីស្រង់លេខចុងក្រោយនៅក្នុងខ្សែអក្សរ នេះជាគំរូដែលត្រូវប្រើ៖
លំនាំ : (\d+)(?!.*\d)
បានបកប្រែទៅជាភាសាមនុស្ស វានិយាយថា៖ ស្វែងរកលេខដែលមិនធ្វើតាម (កន្លែងណាក៏ដោយ មិនមែនភ្លាមៗទេ) ដោយលេខផ្សេងទៀត។ ដើម្បីបង្ហាញវា យើងកំពុងប្រើការមើលអវិជ្ជមាន (?!.*\d) ដែលមានន័យថា នៅខាងស្តាំនៃលំនាំមិនគួរមានខ្ទង់ផ្សេងទៀត (\d) ដោយមិនគិតពីចំនួនតួអក្សរផ្សេងទៀតនៅពីមុខវា។
=RegExpExtract(A5, "(\d+)(?!.*\d)")
គន្លឹះ៖
- ដើម្បីទទួលបាន ការកើតឡើងជាក់លាក់ សូមប្រើ \d+ សម្រាប់ លំនាំ និងសៀរៀលសមស្របលេខសម្រាប់ instance_num ។
- រូបមន្តដើម្បីស្រង់ចេញ លេខទាំងអស់ ត្រូវបានពិភាក្សានៅក្នុងឧទាហរណ៍បន្ទាប់។
Regex ដើម្បីស្រង់ចេញរាល់ការផ្គូផ្គង
រុញឧទាហរណ៍របស់យើងបន្តិចទៀត ឧបមាថាអ្នកចង់យកលេខទាំងអស់ពីខ្សែអក្សរ មិនមែនតែមួយទេ។
ដូចដែលអ្នកបានចងចាំ ចំនួននៃការផ្គូផ្គងដែលបានស្រង់ចេញត្រូវបានគ្រប់គ្រងដោយជម្រើស instance_num អាគុយម៉ង់។ លំនាំដើមគឺត្រូវគ្នាទាំងអស់ ដូច្នេះអ្នកគ្រាន់តែលុបចោលប៉ារ៉ាម៉ែត្រនេះ៖
=RegExpExtract(A2, "\d+")
រូបមន្តដំណើរការយ៉ាងស្រស់ស្អាតសម្រាប់ក្រឡាតែមួយ ប៉ុន្តែឥរិយាបថខុសគ្នានៅក្នុង Dynamic Array Excel និងកំណែមិនថាមវន្ត។
Excel 365 និង Excel 2021
ដោយសារតែការគាំទ្រសម្រាប់អារេថាមវន្ត រូបមន្តធម្មតានឹងហូរចូលទៅក្នុងក្រឡាជាច្រើនដោយស្វ័យប្រវត្តិតាមតម្រូវការ ដើម្បីបង្ហាញលទ្ធផលដែលបានគណនាទាំងអស់។ នៅក្នុងលក្ខខណ្ឌនៃ Excel នេះត្រូវបានគេហៅថា spilled range:
Excel 2019 និងទាបជាង
នៅក្នុង Excel ជាមុនថាមវន្ត រូបមន្តខាងលើនឹងត្រលប់មកវិញតែមួយ។ ដើម្បីទទួលបានការផ្គូផ្គងច្រើន អ្នកត្រូវធ្វើឱ្យវាក្លាយជារូបមន្តអារេ។ សម្រាប់ការនេះ ជ្រើសរើសជួរក្រឡាមួយ វាយរូបមន្ត ហើយចុច Ctrl + Shift + Enter ដើម្បីបញ្ចប់វា។
ការធ្លាក់ចុះនៃវិធីសាស្រ្តនេះគឺបណ្តុំនៃកំហុស #N/A ដែលលេចឡើងនៅក្នុង "កោសិកាបន្ថែម" . គួរឱ្យសោកស្ដាយ គ្មានអ្វីអាចធ្វើបានអំពីវាទេ (ទាំង IFERROR ឬ IFNA មិនអាចជួសជុលវាបានទេ) ។
ស្រង់ការផ្គូផ្គងទាំងអស់ក្នុងក្រឡាមួយ
នៅពេលដំណើរការជួរទិន្នន័យ វិធីសាស្ត្រខាងលើច្បាស់ជាមិនដំណើរការទេ។ ក្នុងករណីនេះដំណោះស្រាយដ៏ល្អនឹងត្រឡប់ការប្រកួតទាំងអស់ក្នុងក្រឡាតែមួយ។ ដើម្បីសម្រេចបាន សូមបម្រើលទ្ធផលនៃ RegExpExtract ទៅកាន់មុខងារ TEXTJOIN ហើយបំបែកពួកវាដោយសញ្ញាកំណត់ណាមួយដែលអ្នកចូលចិត្ត ពោលពាក្យក្បៀស និងដកឃ្លា៖
=TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))
ចំណាំ។ ដោយសារតែមុខងារ TEXTJOIN មាននៅក្នុង Excel សម្រាប់ Microsoft 365, Excel 2021 និង Excel 2019 ប៉ុណ្ណោះ រូបមន្តនឹងមិនដំណើរការក្នុងកំណែចាស់នោះទេ។
Regex ដើម្បីស្រង់អត្ថបទចេញពីខ្សែអក្សរ
ការដកស្រង់អត្ថបទពី ខ្សែអក្សរអក្សរក្រមលេខគឺជាកិច្ចការដ៏លំបាកមួយនៅក្នុង Excel ។ ជាមួយនឹង regex វាកាន់តែងាយស្រួលដូចចំណិត។ គ្រាន់តែប្រើថ្នាក់អវិជ្ជមានដើម្បីផ្គូផ្គងអ្វីគ្រប់យ៉ាងដែលមិនមែនជាខ្ទង់។
លំនាំ : [^\d]+
ដើម្បីទទួលបានខ្សែអក្សររងក្នុងក្រឡានីមួយៗ (ជួរកំពប់) រូបមន្តគឺ៖
=RegExpExtract(A5, "[^\d]+")
ដើម្បីបញ្ចេញការផ្គូផ្គងទាំងអស់ទៅក្នុងក្រឡាតែមួយ ដាក់មុខងារ RegExpExtract នៅក្នុង TEXTJOIN ដូចនេះ៖
=TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))
Regex ទៅ ស្រង់អាសយដ្ឋានអ៊ីមែលចេញពីខ្សែអក្សរ
ដើម្បីដកអាសយដ្ឋានអ៊ីមែលចេញពីខ្សែអក្សរដែលមានព័ត៌មានផ្សេងៗគ្នាជាច្រើន សូមសរសេរកន្សោមធម្មតាដែលចម្លងរចនាសម្ព័ន្ធអាសយដ្ឋានអ៊ីមែល។
លំនាំ : [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}
ការបំបែក regex នេះ នេះជាអ្វីដែលយើងទទួលបាន៖
- [\w\.\-]+ គឺជាឈ្មោះអ្នកប្រើប្រាស់ដែលអាចរួមបញ្ចូលតួអក្សរលេខ 1 ឬច្រើន សញ្ញាចុច សញ្ញាចុច និងសហសញ្ញា។
- @ និមិត្តសញ្ញា
- [A-Za-z0-9\.\-]+ គឺជាឈ្មោះដែនដែលមាន៖ អក្សរធំ និងអក្សរតូច ខ្ទង់ សហសញ្ញា និងចំនុច (ក្នុងករណីនៃដែនរង) ។ សញ្ញាគូសក្រោមមិនត្រូវបានអនុញ្ញាតនៅទីនេះទេ ដូច្នេះសំណុំតួអក្សរ 3 ផ្សេងគ្នា (ដូចជា A-Z a-z និង 0-9) ត្រូវបានប្រើជំនួសឱ្យ \w ដែលត្រូវនឹងអក្សរ ខ្ទង់ ឬសញ្ញាគូសក្រោម។
- \.[A-Za-z ]{2,24} គឺជាដែនកម្រិតកំពូល។ មានចំនុចដែលអមដោយអក្សរធំ និងអក្សរតូច។ ដែនកម្រិតកំពូលភាគច្រើនមានប្រវែង 3 អក្សរ (ឧ. .com .org, .edu ។ល។) ប៉ុន្តែតាមទ្រឹស្តី វាអាចមានពី 2 ទៅ 24 អក្សរ (TLD ដែលបានចុះឈ្មោះវែងបំផុត)។
សន្មត់ថាខ្សែអក្សរស្ថិតនៅក្នុង A5 និងលំនាំក្នុង A2 រូបមន្តដើម្បីស្រង់អាសយដ្ឋានអ៊ីមែលគឺ៖
=RegExpExtract(A5, $A$2)
Regex ដើម្បីស្រង់ដែនចេញពីអ៊ីមែល
នៅពេលដែលវា មកដល់ការស្រង់ដែនអ៊ីមែល គំនិតដំបូងដែលគិតមកដល់គឺការប្រើក្រុមចាប់យកដើម្បីស្វែងរកអត្ថបទដែលធ្វើតាមតួអក្សរ @ ភ្លាមៗ។
លំនាំ : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})
បម្រើវាទៅមុខងារ RegExp របស់យើង៖
=RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")
ហើយ អ្នកនឹងទទួលបានលទ្ធផលនេះ៖
ជាមួយនឹងកន្សោមធម្មតាបែបបុរាណ អ្វីទាំងអស់ដែលនៅក្រៅក្រុមចាប់យកមិនត្រូវបានរួមបញ្ចូលនៅក្នុងការស្រង់ចេញទេ។ គ្មាននរណាម្នាក់ដឹងថាហេតុអ្វីបានជា VBA RegEx ធ្វើការខុសគ្នា និងចាប់យក "@" ផងដែរ។ ដើម្បីកម្ចាត់វា អ្នកអាចដកតួអក្សរទីមួយចេញពីលទ្ធផលដោយជំនួសវាដោយខ្សែទទេ។
=REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")
កន្សោមធម្មតាដើម្បីស្រង់លេខទូរស័ព្ទ
លេខទូរស័ព្ទ អាចត្រូវបានសរសេរតាមវិធីផ្សេងៗគ្នាជាច្រើន ដែលជាមូលហេតុដែលវាមិនអាចទៅរួចទេក្នុងការមករកដំណោះស្រាយដែលធ្វើការក្រោមទាំងអស់។(\d{4}ពី string
កន្សោមធម្មតាសម្រាប់ការស្រង់ចេញកាលបរិច្ឆេទអាស្រ័យលើទម្រង់ដែលកាលបរិច្ឆេទបង្ហាញក្នុងខ្សែអក្សរ។ ឧទាហរណ៍៖
ដើម្បីស្រង់កាលបរិច្ឆេទដូចជា 1/1/21 ឬ 01/01/2021, regex គឺ៖ \d{1,2}\/\d{1,2}\/(\d {4}កាលៈទេសៈ។ ទោះយ៉ាងណាក៏ដោយ អ្នកអាចសរសេរទម្រង់ទាំងអស់ដែលបានប្រើនៅក្នុងសំណុំទិន្នន័យរបស់អ្នក ហើយព្យាយាមផ្គូផ្គងពួកវា។
សម្រាប់ឧទាហរណ៍នេះ យើងនឹងបង្កើត regex ដែលនឹងស្រង់ចេញលេខទូរស័ព្ទក្នុងទម្រង់ណាមួយទាំងនេះ៖
(123) 345-6789 (123) 345 6789 (123)3456789 123- 345-6789 | 123.345.6789 123 345 6789 1233456789 |
លំនាំ ៖ \(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b
- ផ្នែកទីមួយ \(?\d{3} ផ្គូផ្គងលេខសូន្យ ឬវង់ក្រចកបើកមួយតាមដោយបីខ្ទង់ d{3}។
- ផ្នែក [-\. \)]* មានន័យថាតួអក្សរណាមួយនៅក្នុងតង្កៀបការ៉េដែលលេចឡើង 0 ដង ឬច្រើនជាងនេះ៖ សហសញ្ញា លេខ ចន្លោះ ឬវង់ក្រចកបិទ។
- បន្ទាប់ យើងមានបីខ្ទង់ម្តងទៀត d{3} បន្តដោយ សហសញ្ញា រយៈពេល ឬចន្លោះណាមួយ [-\ . ]? លេចឡើង 0 ឬ 1 ដង។
- បន្ទាប់ពីនោះ មានក្រុមបួនខ្ទង់ \d{4}។
- ទីបំផុត មានពាក្យមួយឃ្លា \b កំណត់ថាលេខទូរស័ព្ទដែលយើងជា ការស្វែងរកមិនអាចជាផ្នែកមួយនៃលេខធំជាងនោះទេ។
រូបមន្តពេញលេញមានរូបរាងនេះ៖
=RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")
សូមដឹងថា regex ខាងលើអាចត្រឡប់ពីរបី លទ្ធផលវិជ្ជមានមិនពិត ដូចជា 123) 456 7899 ឬ (123 456 7899)។ កំណែខាងក្រោមដោះស្រាយបញ្ហាទាំងនេះ។ ទោះយ៉ាងណាក៏ដោយ វាក្យសម្ព័ន្ធនេះដំណើរការតែនៅក្នុងមុខងារ VBA RegExp ប៉ុណ្ណោះ មិនមែននៅក្នុងកន្សោមធម្មតាបុរាណទេ។
លំនាំ : (\(\d{3}\)ចេញសម្រាប់ការទាញអត្ថបទរវាងតួអក្សរពីរក៏នឹងដំណើរការសម្រាប់ការស្រង់អត្ថបទរវាងខ្សែអក្សរពីរផងដែរ។
ឧទាហរណ៍ ដើម្បីទទួលបានអ្វីគ្រប់យ៉ាងរវាង "test 1" និង "test 2" សូមប្រើកន្សោមធម្មតាខាងក្រោម។
Pattern : test 1.*?)test 2
រូបមន្តពេញលេញគឺ៖
=AblebitsRegexExtract(A5, "test 1(.*?)test 2")
Regex ដើម្បីស្រង់ដែនចេញពី URL
ទោះបីជាមានកន្សោមធម្មតាក៏ដោយ ការស្រង់ឈ្មោះដែនចេញពី URL មិនមែនជាកិច្ចការតូចតាចទេ។ ធាតុសំខាន់ដែលធ្វើល្បិចគឺក្រុមមិនចាប់យក។ អាស្រ័យលើគោលដៅចុងក្រោយរបស់អ្នក សូមជ្រើសរើស regexes ខាងក្រោមមួយ។
ដើម្បីទទួលបាន ឈ្មោះពេញ រួមទាំងដែនរង
លំនាំ : (?: https?\: