Regex ເພື່ອສະກັດສະຕຣິງໃນ Excel (ຫນຶ່ງຫຼືທັງຫມົດທີ່ກົງກັນ)

  • ແບ່ງປັນນີ້
Michael Brown

ສາ​ລະ​ບານ

ໃນບົດເຝິກຫັດນີ້, ທ່ານຈະໄດ້ຮຽນຮູ້ວິທີໃຊ້ການສະແດງອອກປົກກະຕິໃນ 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 ປົກກະຕິຈະຕົ້ມລົງໄປໃນສອງຂັ້ນຕອນນີ້:

    1. ໃນແຖບ Ablebits Data , ໃນກຸ່ມ ຂໍ້ຄວາມ , ຄລິກ Regex Tools .
    2. ໃນແຖບ ເຄື່ອງມື Regex , ເລືອກຂໍ້ມູນແຫຼ່ງ, ໃສ່ຮູບແບບ Regex ຂອງທ່ານ, ແລະເລືອກຕົວເລືອກ Extract . ເພື່ອ​ໃຫ້​ໄດ້​ຮັບ​ຜົນ​ໄດ້​ຮັບ​ເປັນ​ການ​ທໍາ​ງານ​ທີ່​ກໍາ​ນົດ​ເອງ​, ບໍ່​ແມ່ນ​ຄ່າ​, ເລືອກ​ເອົາ <8​>Insert ເປັນ​ສູດ <9​> ການ​ກວດ​ສອບ​ກ່ອງ. ເມື່ອສຳເລັດແລ້ວ, ໃຫ້ຄລິກທີ່ປຸ່ມ Extract .

    ຜົນໄດ້ຮັບຈະປາກົດຢູ່ໃນຖັນໃໝ່ທາງຂວາຂອງຂໍ້ມູນຕົ້ນສະບັບຂອງທ່ານ:

    AblebitsRegexExtract syntax

    ຟັງຊັນແບບກຳນົດເອງຂອງພວກເຮົາມີ syntax ຕໍ່ໄປນີ້:

    AbblebitsRegexExtract(reference, regular_expression)

    Where:

    • Reference (required) - ການອ້າງອີງເຖິງຕາລາງທີ່ປະກອບດ້ວຍສະຕຣິງແຫຼ່ງທີ່ມາ.
    • Regular_expression (ຕ້ອງການ) - ຮູບແບບ regex ທີ່ກົງກັນ.

    ໝາຍເຫດສຳຄັນ! ຟັງຊັນນີ້ໃຊ້ໄດ້ໃນເຄື່ອງທີ່ຕິດຕັ້ງ Ultimate Suite for Excel ເທົ່ານັ້ນ.

    ບັນທຶກການນຳໃຊ້

    ເພື່ອເຮັດໃຫ້ເສັ້ນໂຄ້ງການຮຽນຮູ້ຂອງທ່ານມີຄວາມຄ່ອງແຄ້ວ ແລະປະສົບການຂອງທ່ານມີຄວາມສຸກຫຼາຍຂຶ້ນ, ກະລຸນາໃສ່ໃຈຈຸດເຫຼົ່ານີ້:

    1. ເພື່ອສ້າງສູດຄຳນວນ, ທ່ານສາມາດໃຊ້ Regex Tools , ຫຼື Excel's Insert function dialog, ຫຼືພິມຊື່ຟັງຊັນເຕັມໃນຕາລາງ. ເມື່ອສູດຄຳນວນຖືກໃສ່ເຂົ້າແລ້ວ, ທ່ານສາມາດຈັດການມັນໄດ້ (ແກ້ໄຂ, ສຳເນົາ ຫຼື ຍ້າຍ) ຄືກັບສູດສູດພື້ນເມືອງໃດໆກໍຕາມ.
    2. ຮູບແບບທີ່ທ່ານໃສ່ໃນແຖບ Regex Tools ໄປຫາອາກິວເມັນທີ 2. ມັນຍັງເປັນໄປໄດ້ທີ່ຈະຮັກສາການສະແດງອອກເປັນປົກກະຕິຢູ່ໃນຫ້ອງແຍກຕ່າງຫາກ. ໃນ​ກໍ​ລະ​ນີ​ນີ້, ພຽງ​ແຕ່​ນໍາ​ໃຊ້​ການ​ອ້າງ​ອີງ​ເຊ​ລ​ສໍາ​ລັບ​ການ​ໂຕ້​ຕອບ​ທີ 2.
    3. ຟັງ​ຊັນ​ສະ​ກັດ ການ​ຈັບ​ຄູ່​ທີ່​ພົບ​ຄັ້ງ​ທໍາ​ອິດ .
    4. ຕາມ​ຄ່າ​ເລີ່ມ​ຕົ້ນ, ຟັງ​ຊັນ​ແມ່ນ case. -sensitive . ສຳລັບການຈັບຄູ່ຕົວພິມນ້ອຍ, ໃຫ້ໃຊ້ຮູບແບບ (?i).
    5. ຫາກບໍ່ພົບການຈັບຄູ່, ຂໍ້ຜິດພາດ #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 ເພື່ອແຍກຂໍ້ຄວາມລະຫວ່າງສອງສະຕຣິງ

    ວິທີການທີ່ພວກເຮົາໄດ້ເຮັດວຽກຕີຄວາມໝາຍຕາມຕົວໜັງສື).

  • (?:[A-Za-z\-\.]{2,255}\.)? - ກຸ່ມທີ່ບໍ່ຈັບຕົວເພື່ອກໍານົດລະດັບທີສາມ, ລະດັບສີ່, ແລະອື່ນໆ. ໂດເມນ, ຖ້າມີ ( ມືຖື ໃນ URL ຕົວຢ່າງຂອງພວກເຮົາ). ໃນຮູບແບບທໍາອິດ, ມັນຖືກຈັດໃສ່ຢູ່ໃນກຸ່ມການຈັບຕົວທີ່ໃຫຍ່ກວ່າເພື່ອໃຫ້ໂດເມນຍ່ອຍທັງຫມົດດັ່ງກ່າວຖືກລວມເຂົ້າໃນການສະກັດເອົາ. ໂດເມນຍ່ອຍສາມາດມີຄວາມຍາວຈາກ 2 ຫາ 255 ຕົວອັກສອນ, ດັ່ງນັ້ນຈຶ່ງມີຕົວກໍານົດປະລິມານ {2,255}.
  • ([A-Za-z\d\-]{1,63}\.[A-Za-z] {2,24}) - ຈັບກຸ່ມເພື່ອສະກັດໂດເມນລະດັບທີສອງ ( ablebits ) ແລະໂດເມນລະດັບສູງສຸດ ( com ). ຄວາມຍາວສູງສຸດຂອງໂດເມນລະດັບທີສອງແມ່ນ 63 ຕົວອັກສອນ. ໂດເມນລະດັບສູງສຸດທີ່ຍາວທີ່ສຸດໃນປະຈຸບັນມີ 24 ຕົວອັກສອນ.
  • ແມ່ນຂຶ້ນກັບການສະແດງອອກປົກກະຕິໃນ 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 ຂອງທ່ານຢ່າງມີປະສິດທິພາບ, ມີບາງສິ່ງທີ່ສໍາຄັນທີ່ຕ້ອງລະວັງ:

    1. ຕາມຄ່າເລີ່ມຕົ້ນ, ຟັງຊັນຈະສົ່ງກັບ ການຈັບຄູ່ທີ່ພົບທັງໝົດ ເຂົ້າໄປໃນເຊລໃກ້ຄຽງ ດັ່ງທີ່ສະແດງໃນຕົວຢ່າງນີ້. ເພື່ອ​ໃຫ້​ໄດ້​ຮັບ​ການ​ເກີດ​ຂຶ້ນ​ສະ​ເພາະ​ໃດ​ຫນຶ່ງ​, ໃຫ້​ສະ​ຫນອງ​ຕົວ​ເລກ​ທີ່​ສອດ​ຄ້ອງ​ກັນ​ກັບ instance_num argument.
    2. ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​, ການ​ທໍາ​ງານ​ແມ່ນ ຕົວ​ພິມ​ນ້ອຍ​ຕົວ​ພິມ​ນ້ອຍ​ ​. ສຳລັບການຈັບຄູ່ຕົວພິມນ້ອຍ, ໃຫ້ຕັ້ງອາກິວເມັນ match_case ເປັນ FALSE. ເນື່ອງຈາກຂໍ້ຈຳກັດຂອງ VBA, ໂຄງສ້າງທີ່ບໍ່ອ່ອນໄຫວກັບຕົວພິມໃຫຍ່ (?i) ຈະບໍ່ເຮັດວຽກ.
    3. ຖ້າ ບໍ່ພົບຮູບແບບທີ່ຖືກຕ້ອງ , ຟັງຊັນຈະບໍ່ສົ່ງຄືນຫຍັງ (ສະຕຣິງຫວ່າງເປົ່າ).
    4. ຖ້າ ຮູບແບບບໍ່ຖືກຕ້ອງ , ເປັນ #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?\:

    Michael Brown ເປັນຜູ້ທີ່ມີຄວາມກະຕືລືລົ້ນທາງດ້ານເທກໂນໂລຍີທີ່ອຸທິດຕົນທີ່ມີຄວາມກະຕືລືລົ້ນໃນຂະບວນການທີ່ສັບສົນໂດຍນໍາໃຊ້ເຄື່ອງມືຊອບແວ. ດ້ວຍປະສົບການຫຼາຍກວ່າໜຶ່ງທົດສະວັດໃນອຸດສາຫະກຳເທັກໂນໂລຍີ, ລາວໄດ້ເນັ້ນທັກສະໃນ Microsoft Excel ແລະ Outlook, ເຊັ່ນດຽວກັນກັບ Google Sheets ແລະ Docs. blog ຂອງ Michael ແມ່ນອຸທິດຕົນເພື່ອແບ່ງປັນຄວາມຮູ້ແລະຄວາມຊໍານານຂອງລາວກັບຜູ້ອື່ນ, ສະຫນອງຄໍາແນະນໍາແລະຄໍາແນະນໍາທີ່ງ່າຍຕໍ່ການຕິດຕາມເພື່ອປັບປຸງຜົນຜະລິດແລະປະສິດທິພາບ. ບໍ່ວ່າທ່ານຈະເປັນມືອາຊີບທີ່ມີລະດູການຫຼືຜູ້ເລີ່ມຕົ້ນ, blog ຂອງ Michael ສະເຫນີຄວາມເຂົ້າໃຈທີ່ມີຄຸນຄ່າແລະຄໍາແນະນໍາພາກປະຕິບັດສໍາລັບການໄດ້ຮັບປະໂຫຍດສູງສຸດຈາກເຄື່ອງມືຊອບແວທີ່ຈໍາເປັນເຫຼົ່ານີ້.