ສາລະບານ
ໃນບົດເຝິກຫັດນີ້, ທ່ານຈະໄດ້ຮຽນຮູ້ວິທີໃຊ້ການສະແດງອອກປົກກະຕິໃນ Excel ເພື່ອຊອກຫາ ແລະແຍກສາຍຍ່ອຍທີ່ກົງກັບຮູບແບບທີ່ໃຫ້ໄວ້.
Microsoft Excel ສະໜອງຫນ້າທີ່ຈໍານວນຫນຶ່ງເພື່ອແຍກຂໍ້ຄວາມ. ຈາກຈຸລັງ. ຟັງຊັນເຫຼົ່ານັ້ນສາມາດຮັບມືກັບສິ່ງທ້າທາຍການສະກັດເອົາສະຕຣິງສ່ວນໃຫຍ່ໃນແຜ່ນວຽກຂອງເຈົ້າ. ຫຼາຍທີ່ສຸດ, ແຕ່ບໍ່ແມ່ນທັງຫມົດ. ເມື່ອຟັງຊັນຂໍ້ຄວາມສະດຸດ, ການສະແດງອອກເປັນປົກກະຕິມາຊ່ວຍຊີວິດ. ລໍຖ້າ… Excel ບໍ່ມີຟັງຊັນ RegEx! ແທ້ຈິງແລ້ວ, ບໍ່ມີຫນ້າທີ່ inbuilt. ແຕ່ບໍ່ມີຫຍັງທີ່ຈະປ້ອງກັນບໍ່ໃຫ້ເຈົ້າໃຊ້ຕົວຂອງທ່ານເອງ :)
ຟັງຊັນ Excel VBA Regex ເພື່ອແຍກສະຕຣິງ
ເພື່ອເພີ່ມຟັງຊັນ Regex Extract ໃຫ້ກັບ Excel ຂອງທ່ານ, ວາງລະຫັດຕໍ່ໄປນີ້ໃນຕົວແກ້ໄຂ VBA. ເພື່ອເປີດໃຊ້ການສະແດງອອກປົກກະຕິໃນ VBA, ພວກເຮົາກໍາລັງໃຊ້ວັດຖຸ Microsoft RegExp ທີ່ມີໃນຕົວ. text_matches() As String Dim matches_index As Integer On Error GoTo ErrHandl RegExpExtract = "" ຕັ້ງຄ່າ regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = ຮູບແບບ regex.Global = True regex.MultiLine = True ຖ້າ True = match_case ຫຼັງຈາກນັ້ນ regex. ignorecase = False Else regex.ignorecase = True End ຖ້າຕັ້ງກົງກັນ = regex.Execute(text) ຖ້າ 0 < matches.Count Then If (0 = instance_num) ຫຼັງຈາກນັ້ນ ReDim text_matches(matches.Count - 1, 0) ສໍາລັບ matches_index = 0 ToVBA RegExp, ຂ້າພະເຈົ້າຂໍແນະນໍາໃຫ້ທ່ານອ່ານສ່ວນຕໍ່ໄປທີ່ສົນທະນາກ່ຽວກັບຟັງຊັນ .NET Regex ທີ່ມີປະສິດທິພາບຫຼາຍ.
ຟັງຊັນ Regex ແບບ .NET ສະເພາະເພື່ອແຍກຂໍ້ຄວາມໃນ Excel
ບໍ່ເຫມືອນກັບຟັງຊັນ VBA RegExp ທີ່ ສາມາດຂຽນໄດ້ໂດຍຜູ້ໃຊ້ Excel ໃດກໍ່ຕາມ, .NET RegEx ແມ່ນພື້ນທີ່ຂອງຜູ້ພັດທະນາ. Microsoft .NET Framework ຮອງຮັບ syntax ການສະແດງອອກປົກກະຕິເຕັມຮູບແບບທີ່ເຂົ້າກັນໄດ້ກັບ Perl 5. ບົດຄວາມນີ້ຈະບໍ່ສອນທ່ານກ່ຽວກັບວິທີການຂຽນຫນ້າທີ່ດັ່ງກ່າວ (ຂ້ອຍບໍ່ແມ່ນນັກຂຽນໂປລແກລມແລະບໍ່ມີຄວາມຄິດເລັກນ້ອຍກ່ຽວກັບວິທີເຮັດແນວນັ້ນ :)
ສີ່ຟັງຊັນທີ່ມີປະສິດທິພາບທີ່ປະມວນຜົນໂດຍເຄື່ອງຈັກ .NET RegEx ມາດຕະຖານໄດ້ຖືກຂຽນໄວ້ແລ້ວໂດຍຜູ້ພັດທະນາຂອງພວກເຮົາ ແລະລວມຢູ່ໃນ Ultimate Suite. ຂ້າງລຸ່ມນີ້, ພວກເຮົາຈະສະແດງໃຫ້ເຫັນການນໍາໃຊ້ປະຕິບັດຫນ້າບາງຢ່າງທີ່ຖືກອອກແບບມາເປັນພິເສດສໍາລັບການສະກັດຂໍ້ຄວາມໃນ Excel.
ຄໍາແນະນໍາ. ສໍາລັບຂໍ້ມູນກ່ຽວກັບ syntax .NET Regex, ກະລຸນາອ້າງອີງເຖິງ .NET Regular Expression Language.
ວິທີການສະກັດເອົາ stings ໃນ Excel ໂດຍໃຊ້ expression ປົກກະຕິ
ສົມມຸດວ່າທ່ານມີ Ultimate Suite ເວີຊັນຫຼ້າສຸດຕິດຕັ້ງແລ້ວ, ການສະກັດຂໍ້ຄວາມໂດຍໃຊ້ expression ປົກກະຕິຈະຕົ້ມລົງໄປໃນສອງຂັ້ນຕອນນີ້:
- ໃນແຖບ Ablebits Data , ໃນກຸ່ມ ຂໍ້ຄວາມ , ຄລິກ Regex Tools .
- ໃນແຖບ ເຄື່ອງມື Regex , ເລືອກຂໍ້ມູນແຫຼ່ງ, ໃສ່ຮູບແບບ Regex ຂອງທ່ານ, ແລະເລືອກຕົວເລືອກ Extract . ເພື່ອໃຫ້ໄດ້ຮັບຜົນໄດ້ຮັບເປັນການທໍາງານທີ່ກໍານົດເອງ, ບໍ່ແມ່ນຄ່າ, ເລືອກເອົາ <8>Insert ເປັນສູດ <9> ການກວດສອບກ່ອງ. ເມື່ອສຳເລັດແລ້ວ, ໃຫ້ຄລິກທີ່ປຸ່ມ Extract .
ຜົນໄດ້ຮັບຈະປາກົດຢູ່ໃນຖັນໃໝ່ທາງຂວາຂອງຂໍ້ມູນຕົ້ນສະບັບຂອງທ່ານ:
AblebitsRegexExtract syntax
ຟັງຊັນແບບກຳນົດເອງຂອງພວກເຮົາມີ syntax ຕໍ່ໄປນີ້:
AbblebitsRegexExtract(reference, regular_expression)Where:
- Reference (required) - ການອ້າງອີງເຖິງຕາລາງທີ່ປະກອບດ້ວຍສະຕຣິງແຫຼ່ງທີ່ມາ.
- Regular_expression (ຕ້ອງການ) - ຮູບແບບ regex ທີ່ກົງກັນ.
ໝາຍເຫດສຳຄັນ! ຟັງຊັນນີ້ໃຊ້ໄດ້ໃນເຄື່ອງທີ່ຕິດຕັ້ງ Ultimate Suite for Excel ເທົ່ານັ້ນ.
ບັນທຶກການນຳໃຊ້
ເພື່ອເຮັດໃຫ້ເສັ້ນໂຄ້ງການຮຽນຮູ້ຂອງທ່ານມີຄວາມຄ່ອງແຄ້ວ ແລະປະສົບການຂອງທ່ານມີຄວາມສຸກຫຼາຍຂຶ້ນ, ກະລຸນາໃສ່ໃຈຈຸດເຫຼົ່ານີ້:
- ເພື່ອສ້າງສູດຄຳນວນ, ທ່ານສາມາດໃຊ້ Regex Tools , ຫຼື Excel's Insert function dialog, ຫຼືພິມຊື່ຟັງຊັນເຕັມໃນຕາລາງ. ເມື່ອສູດຄຳນວນຖືກໃສ່ເຂົ້າແລ້ວ, ທ່ານສາມາດຈັດການມັນໄດ້ (ແກ້ໄຂ, ສຳເນົາ ຫຼື ຍ້າຍ) ຄືກັບສູດສູດພື້ນເມືອງໃດໆກໍຕາມ.
- ຮູບແບບທີ່ທ່ານໃສ່ໃນແຖບ Regex Tools ໄປຫາອາກິວເມັນທີ 2. ມັນຍັງເປັນໄປໄດ້ທີ່ຈະຮັກສາການສະແດງອອກເປັນປົກກະຕິຢູ່ໃນຫ້ອງແຍກຕ່າງຫາກ. ໃນກໍລະນີນີ້, ພຽງແຕ່ນໍາໃຊ້ການອ້າງອີງເຊລສໍາລັບການໂຕ້ຕອບທີ 2.
- ຟັງຊັນສະກັດ ການຈັບຄູ່ທີ່ພົບຄັ້ງທໍາອິດ .
- ຕາມຄ່າເລີ່ມຕົ້ນ, ຟັງຊັນແມ່ນ case. -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 ໂດຍໃຊ້ສຳນວນປົກກະຕິ. ຂ້າພະເຈົ້າຂໍຂອບໃຈທ່ານສໍາລັບການອ່ານແລະຫວັງວ່າຈະໄດ້ພົບທ່ານໃນ blog ຂອງພວກເຮົາໃນອາທິດຕໍ່ໄປ! (ໄຟລ໌ .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 = ErrVuealx Functionຖ້າທ່ານມີປະສົບການເລັກນ້ອຍກັບ VBA, ຄູ່ມືຜູ້ໃຊ້ແບບເທື່ອລະຂັ້ນຕອນອາດຈະເປັນປະໂຫຍດ: ວິທີການໃສ່ລະຫັດ VBA ໃນ Excel.
ຫມາຍເຫດ. ເພື່ອໃຫ້ຟັງຊັນເຮັດວຽກ, ໃຫ້ແນ່ໃຈວ່າຈະບັນທຶກໄຟລ໌ຂອງທ່ານເປັນ ປຶ້ມວຽກທີ່ເປີດໃຊ້ Macro (.xlsm).
RegExpExtract syntax
ຟັງຊັນ RegExpExtract ຄົ້ນຫາສະຕຣິງການປ້ອນຂໍ້ມູນສໍາລັບຄ່າທີ່ກົງກັບ expression ປົກກະຕິ ແລະສະກັດເອົາຫນຶ່ງຫຼືທັງຫມົດທີ່ກົງກັນ.
ຟັງຊັນມີ syntax ຕໍ່ໄປນີ້. :
RegExpExtract(text, pattern, [instance_num], [match_case])Where:
- Text (required) - the text string to search in.
- ຮູບແບບ (ຕ້ອງການ) - ການສະແດງຜົນປົກກະຕິທີ່ຈະກົງກັນ. ເມື່ອສະໜອງໃຫ້ໂດຍກົງໃນສູດຄຳນວນ, ຮູບແບບດັ່ງກ່າວຄວນຖືກໃສ່ໃນເຄື່ອງໝາຍວົງຢືມສອງເທົ່າ.
- Instance_num (ບໍ່ບັງຄັບ) - ໝາຍເລກຊີຣຽວທີ່ລະບຸວ່າຈະແຍກຕົວຢ່າງໃດ. ຖ້າຖືກລະເວັ້ນ, ໃຫ້ສົ່ງຄືນການຈັບຄູ່ທີ່ພົບທັງໝົດ (ຄ່າເລີ່ມຕົ້ນ).
- Match_case (ທາງເລືອກ) - ກຳນົດວ່າຈະກົງກັນຫຼືບໍ່ສົນໃຈຕົວພິມຂໍ້ຄວາມ. ຖ້າຖືກຕ້ອງ ຫຼືຖືກລະເວັ້ນ (ຄ່າເລີ່ມຕົ້ນ), ການຈັບຄູ່ຕົວພິມນ້ອຍໃຫຍ່ຖືກປະຕິບັດ; ຖ້າ FALSE - ບໍ່ມີຕົວພິມນ້ອຍໃຫຍ່.
ຟັງຊັນໃຊ້ໄດ້ໃນທຸກລຸ້ນຂອງ Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 ແລະ Excel 2010.
4 ຢ່າງທີ່ທ່ານຄວນຮູ້ກ່ຽວກັບ RegExpExtract
ເພື່ອໃຊ້ຟັງຊັນໃນ Excel ຂອງທ່ານຢ່າງມີປະສິດທິພາບ, ມີບາງສິ່ງທີ່ສໍາຄັນທີ່ຕ້ອງລະວັງ:
- ຕາມຄ່າເລີ່ມຕົ້ນ, ຟັງຊັນຈະສົ່ງກັບ ການຈັບຄູ່ທີ່ພົບທັງໝົດ ເຂົ້າໄປໃນເຊລໃກ້ຄຽງ ດັ່ງທີ່ສະແດງໃນຕົວຢ່າງນີ້. ເພື່ອໃຫ້ໄດ້ຮັບການເກີດຂຶ້ນສະເພາະໃດຫນຶ່ງ, ໃຫ້ສະຫນອງຕົວເລກທີ່ສອດຄ້ອງກັນກັບ instance_num argument.
- ໂດຍຄ່າເລີ່ມຕົ້ນ, ການທໍາງານແມ່ນ ຕົວພິມນ້ອຍຕົວພິມນ້ອຍ . ສຳລັບການຈັບຄູ່ຕົວພິມນ້ອຍ, ໃຫ້ຕັ້ງອາກິວເມັນ match_case ເປັນ FALSE. ເນື່ອງຈາກຂໍ້ຈຳກັດຂອງ VBA, ໂຄງສ້າງທີ່ບໍ່ອ່ອນໄຫວກັບຕົວພິມໃຫຍ່ (?i) ຈະບໍ່ເຮັດວຽກ.
- ຖ້າ ບໍ່ພົບຮູບແບບທີ່ຖືກຕ້ອງ , ຟັງຊັນຈະບໍ່ສົ່ງຄືນຫຍັງ (ສະຕຣິງຫວ່າງເປົ່າ).
- ຖ້າ ຮູບແບບບໍ່ຖືກຕ້ອງ , ເປັນ #VALUE! ຂໍ້ຜິດພາດເກີດຂຶ້ນ.
ກ່ອນທີ່ທ່ານຈະເລີ່ມໃຊ້ຟັງຊັນແບບກຳນົດເອງນີ້ໃນແຜ່ນງານຂອງເຈົ້າ, ເຈົ້າຕ້ອງເຂົ້າໃຈສິ່ງທີ່ມັນມີຄວາມສາມາດ, ບໍ່ແມ່ນບໍ? ຕົວຢ່າງຂ້າງລຸ່ມນີ້ກວມເອົາກໍລະນີການນໍາໃຊ້ທົ່ວໄປຈໍານວນຫນຶ່ງແລະອະທິບາຍວ່າເປັນຫຍັງພຶດຕິກໍາອາດຈະແຕກຕ່າງກັນໃນ Dynamic Array Excel (Microsoft 365 ແລະ Excel 2021) ແລະ Excel ແບບດັ້ງເດີມ (2019 ແລະຮຸ່ນເກົ່າກວ່າ).
ໝາຍເຫດ. ອອກຕົວຢ່າງ regex ຖືກຂຽນໄວ້ສໍາລັບຊຸດຂໍ້ມູນ fairy ງ່າຍດາຍ. ພວກເຮົາບໍ່ສາມາດຮັບປະກັນພວກເຂົາເຈົ້າຈະເຮັດວຽກ flawlessly ໃນແຜ່ນວຽກທີ່ແທ້ຈິງຂອງທ່ານ. ຜູ້ທີ່ມີປະສົບການກັບ regex ຈະຍອມຮັບວ່າການຂຽນຄໍາເວົ້າແບບປົກກະຕິແມ່ນເສັ້ນທາງທີ່ບໍ່ມີວັນສິ້ນສຸດໄປສູ່ຄວາມສົມບູນແບບ - ເກືອບສະເຫມີມີວິທີທີ່ຈະເຮັດໃຫ້ມັນມີຄວາມສະຫງ່າງາມກວ່າ ຫຼືສາມາດຈັດການຂໍ້ມູນການປ້ອນຂໍ້ມູນໄດ້ກວ້າງຂຶ້ນ.
Regex ເພື່ອແຍກຕົວເລກອອກຈາກສະຕຣິງ
ໂດຍປະຕິບັດຕາມການສອນສູງສຸດພື້ນຖານ "ຈາກງ່າຍດາຍໄປຫາສະລັບສັບຊ້ອນ", ພວກເຮົາຈະເລີ່ມຕົ້ນດ້ວຍກໍລະນີທີ່ທໍາມະດາຫຼາຍ: ການແຍກຕົວເລກອອກຈາກສະຕຣິງ.
The ສິ່ງທໍາອິດສໍາລັບທ່ານທີ່ຈະຕັດສິນໃຈແມ່ນຕົວເລກທີ່ຈະດຶງຂໍ້ມູນ: ທໍາອິດ, ສຸດທ້າຍ, ການປະກົດຕົວສະເພາະຫຼືຕົວເລກທັງຫມົດ.
ສະກັດຕົວເລກທໍາອິດ
ນີ້ແມ່ນງ່າຍດາຍທີ່ regex ສາມາດໄດ້ຮັບ. ໂດຍທີ່ \d ຫມາຍເຖິງຕົວເລກຈາກ 0 ຫາ 9, ແລະ + ຫມາຍຄວາມວ່າຫນຶ່ງຄັ້ງຫຼືຫຼາຍກວ່ານັ້ນ, ການສະແດງອອກປົກກະຕິຂອງພວກເຮົາໃຊ້ຮູບແບບນີ້:
Pattern : \d+
Set instance_num ຫາ 1 ແລະທ່ານຈະໄດ້ຮັບຜົນທີ່ຕ້ອງການ:
=RegExpExtract(A5, "\d+", 1)
ບ່ອນທີ່ A5 ແມ່ນສະຕຣິງຕົ້ນສະບັບ.
ເພື່ອຄວາມສະດວກ, ທ່ານສາມາດປ້ອນຂໍ້ມູນ ຮູບແບບໃນຕາລາງທີ່ກຳນົດໄວ້ລ່ວງໜ້າ ($A$2 ) ແລະລັອກທີ່ຢູ່ຂອງມັນດ້ວຍເຄື່ອງໝາຍ $:
=RegExpExtract(A5, $A$2, 1)
ເອົາຕົວເລກສຸດທ້າຍ
ເພື່ອແຍກຕົວເລກສຸດທ້າຍອອກເປັນສະຕຣິງ , ນີ້ແມ່ນຮູບແບບທີ່ຈະໃຊ້:
ຮູບແບບ : (\d+)(?!.*\d)
ແປເປັນພາສາມະນຸດ , ມັນບອກວ່າ: ຊອກຫາຕົວເລກທີ່ບໍ່ໄດ້ຕິດຕາມ (ບ່ອນໃດກໍ່ຕາມ, ບໍ່ພຽງແຕ່ທັນທີ) ໂດຍຕົວເລກອື່ນໆ. ເພື່ອສະແດງສິ່ງນີ້, ພວກເຮົາໃຊ້ການເບິ່ງທາງລົບ (?!.*\d), ຊຶ່ງຫມາຍຄວາມວ່າທາງຂວາຂອງຮູບແບບບໍ່ຄວນມີຕົວເລກອື່ນ (\d) ໂດຍບໍ່ຄໍານຶງເຖິງຕົວລະຄອນອື່ນໃດກ່ອນມັນ.<3
=RegExpExtract(A5, "(\d+)(?!.*\d)")
ເຄັດລັບ:
- ເພື່ອໃຫ້ໄດ້ ການປະກົດຕົວສະເພາະ , ໃຊ້ \d+ ສໍາລັບ ຮູບແບບ ແລະ serial ທີ່ເຫມາະສົມ.ຕົວເລກສຳລັບ instance_num .
- ສູດການສະກັດ ຕົວເລກທັງໝົດ ແມ່ນໄດ້ກ່າວເຖິງໃນຕົວຢ່າງຕໍ່ໄປ.
Regex ເພື່ອແຍກຂໍ້ມູນທີ່ກົງກັນທັງໝົດ
ການຊຸກຍູ້ຕົວຢ່າງຂອງພວກເຮົາຕື່ມອີກເລັກນ້ອຍ, ສົມມຸດວ່າທ່ານຕ້ອງການເອົາຕົວເລກທັງໝົດຈາກສະຕຣິງ, ບໍ່ພຽງແຕ່ອັນດຽວເທົ່ານັ້ນ.
ດັ່ງທີ່ເຈົ້າອາດຈະຈື່ໄດ້, ຈໍານວນການຈັບຄູ່ທີ່ແຍກອອກມາແມ່ນຄວບຄຸມໂດຍທາງເລືອກ instance_num argument. ຄ່າເລີ່ມຕົ້ນແມ່ນກົງກັນທັງໝົດ, ສະນັ້ນທ່ານພຽງແຕ່ລະເວັ້ນພາລາມິເຕີນີ້:
=RegExpExtract(A2, "\d+")
ສູດເຮັດວຽກໄດ້ຢ່າງສວຍງາມສຳລັບເຊລດຽວ, ແຕ່ພຶດຕິກຳແຕກຕ່າງກັນໃນ Dynamic Array Excel ແລະເວີຊັນທີ່ບໍ່ແມ່ນແບບເຄື່ອນໄຫວ.
Excel 365 ແລະ Excel 2021
ເນື່ອງຈາກການຮອງຮັບອາເຣແບບໄດນາມິກ, ສູດສູດປົກກະຕິຈະຮົ່ວເຂົ້າໄປໃນເຊລຫຼາຍເທົ່າທີ່ຈຳເປັນເພື່ອສະແດງຜົນການຄຳນວນທັງໝົດ. ໃນແງ່ຂອງ Excel, ອັນນີ້ເອີ້ນວ່າໄລຍະທີ່ຮົ່ວໄຫຼ:
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, ມັນຈະກາຍເປັນເລື່ອງງ່າຍຄືກັບ pie. ພຽງແຕ່ໃຊ້ຄລາສທີ່ຖືກລົບເພື່ອຈັບຄູ່ທຸກຢ່າງທີ່ບໍ່ແມ່ນຕົວເລກ.
ຮູບແບບ : [^\d]+
ເພື່ອເອົາສະຕຣິງຍ່ອຍຢູ່ໃນແຕ່ລະເຊລ (ໄລຍະການຮົ່ວໄຫຼ) , ສູດແມ່ນ:
=RegExpExtract(A5, "[^\d]+")
ເພື່ອສົ່ງຜົນທີ່ກົງກັນທັງໝົດເຂົ້າໄປໃນເຊລດຽວ, ວາງຟັງຊັນ RegExpExtract ໃນ TEXTJOIN ແບບນີ້:
=TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))
Regex to ແຍກທີ່ຢູ່ອີເມວອອກຈາກສະຕຣິງ
ເພື່ອດຶງທີ່ຢູ່ອີເມວອອກຈາກສະຕຣິງທີ່ມີຂໍ້ມູນທີ່ແຕກຕ່າງກັນຫຼາຍ, ໃຫ້ຂຽນແບບປົກກະຕິທີ່ເຮັດເລື້ມຄືນໂຄງສ້າງທີ່ຢູ່ອີເມວ.
ຮູບແບບ : [\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 ຫຼືຫຼາຍກວ່ານັ້ນ: ຂີດຕໍ່, ໄລຍະເວລາ, ຍະຫວ່າງ ຫຼືວົງເລັບປິດ. ຂີດໝາຍ, ໄລຍະເວລາ ຫຼືຍະຫວ່າງ [-\. ]? ປະກົດ 0 ຫຼື 1 ເທື່ອ.
- ຫຼັງຈາກນັ້ນ, ມີກຸ່ມຂອງສີ່ຕົວເລກ \d{4}.
- ສຸດທ້າຍ, ມີຂອບເຂດຄໍາ \b ກໍານົດວ່າຫມາຍເລກໂທລະສັບທີ່ພວກເຮົາແມ່ນ. ຊອກຫາບໍ່ສາມາດເປັນສ່ວນໜຶ່ງຂອງຕົວເລກທີ່ໃຫຍ່ກວ່າໄດ້.
ສູດເຕັມຮູບແບບນີ້:
=RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")
ກະລຸນາຮັບຊາບວ່າ regex ຂ້າງເທິງອາດຈະສົ່ງຄືນບາງອັນ. ຜົນໄດ້ຮັບທາງບວກທີ່ບໍ່ຖືກຕ້ອງເຊັ່ນ: 123) 456 7899 ຫຼື (123 456 7899. ສະບັບຂ້າງລຸ່ມນີ້ແກ້ໄຂບັນຫາເຫຼົ່ານີ້. ແນວໃດກໍ່ຕາມ, syntax ນີ້ໃຊ້ໄດ້ໃນຟັງຊັນ VBA RegExp ເທົ່ານັ້ນ, ບໍ່ແມ່ນຢູ່ໃນການສະແດງຜົນປົກກະຕິຄລາສສິກ.
ຮູບແບບ : (\(\d{3}\)out ສໍາລັບການດຶງຂໍ້ຄວາມລະຫວ່າງສອງຕົວອັກສອນຍັງໃຊ້ໄດ້ສໍາລັບການສະກັດຂໍ້ຄວາມລະຫວ່າງສອງສະຕຣິງ.
ຕົວຢ່າງ, ເພື່ອໃຫ້ໄດ້ທຸກຢ່າງລະຫວ່າງ "test 1" ແລະ "test 2", ໃຫ້ໃຊ້ການສະແດງອອກປົກກະຕິຕໍ່ໄປນີ້.
Pattern : test 1.*?)test 2
ສູດສົມບູນແມ່ນ:
=AblebitsRegexExtract(A5, "test 1(.*?)test 2")
Regex ເພື່ອສະກັດໂດເມນຈາກ URL
ເຖິງແມ່ນວ່າຈະມີການສະແດງອອກເປັນປົກກະຕິ, ການສະກັດຊື່ໂດເມນຈາກ URLs ບໍ່ແມ່ນວຽກເລັກນ້ອຍ. ອົງປະກອບທີ່ສໍາຄັນທີ່ເຮັດ trick ແມ່ນກຸ່ມທີ່ບໍ່ແມ່ນການຈັບຕົວ. ອີງຕາມເປົ້າໝາຍສູງສຸດຂອງເຈົ້າ, ເລືອກໜຶ່ງໃນ regexes ລຸ່ມນີ້.
ເພື່ອໃຫ້ໄດ້ ຊື່ໂດເມນເຕັມ ລວມທັງໂດເມນຍ່ອຍ
ຮູບແບບ : (?: https?\: