แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excelงานที่ใช้เวลานานและน่าหงุดหงิดที่สุดเมื่อทำงานกับข้อความใน Excel คือ การแยกวิเคราะห์ – แยกวิเคราะห์ “โจ๊ก” ที่เป็นตัวอักษรและตัวเลขเป็นส่วนประกอบและแยกชิ้นส่วนที่เราต้องการจากมัน ตัวอย่างเช่น:

  • แยกรหัสไปรษณีย์ออกจากที่อยู่ (จะดีถ้ารหัสไปรษณีย์อยู่ต้นเสมอ แต่ถ้าไม่ใช่ล่ะ)
  • ค้นหาหมายเลขและวันที่ของใบแจ้งหนี้จากคำอธิบายการชำระเงินในใบแจ้งยอดธนาคาร
  • การแยก TIN จากคำอธิบายที่หลากหลายของบริษัทในรายชื่อคู่สัญญา
  • ค้นหาหมายเลขรถหรือหมายเลขบทความในคำอธิบาย ฯลฯ

โดยปกติ ในกรณีเช่นนี้ หลังจากใช้เวลาครึ่งชั่วโมงของการเลือกข้อความที่น่าเบื่อด้วยตนเอง ความคิดจะเริ่มเข้ามาในความคิดเพื่อทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ (โดยเฉพาะอย่างยิ่งหากมีข้อมูลจำนวนมาก) มีวิธีแก้ปัญหาหลายประการและระดับความซับซ้อนและประสิทธิภาพต่างกันไป:

  • ใช้ ฟังก์ชันข้อความ Excel ในตัว เพื่อค้นหาข้อความตัดกาว: เลฟซิมวี (ซ้าย), ขวา (ขวา), พีเอสทีอาร์ (กลาง), STEPIT (ต่อ) และสิ่งที่คล้ายคลึงกัน, รวมกัน (ข้อต่อ), EXACT (ที่แน่นอน) เป็นต้น วิธีนี้เป็นวิธีที่ดีหากมีตรรกะที่ชัดเจนในข้อความ (เช่น ดัชนีจะอยู่ที่จุดเริ่มต้นของที่อยู่เสมอ) มิฉะนั้น สูตรจะซับซ้อนมากขึ้น และในบางครั้ง ก็ยังมาถึงสูตรอาร์เรย์ ซึ่งทำให้ตารางขนาดใหญ่ทำงานช้าลงอย่างมาก
  • การใช้ เช่นตัวดำเนินการความคล้ายคลึงของข้อความ จาก Visual Basic ที่รวมอยู่ในฟังก์ชันแมโครแบบกำหนดเอง สิ่งนี้ทำให้คุณสามารถใช้การค้นหาที่ยืดหยุ่นมากขึ้นโดยใช้อักขระตัวแทน (*, #,?, ฯลฯ ) น่าเสียดายที่เครื่องมือนี้ไม่สามารถแยกสตริงย่อยที่ต้องการออกจากข้อความได้ - ให้ตรวจสอบเฉพาะว่ามีอยู่ในนั้นหรือไม่

นอกเหนือจากข้างต้น ยังมีอีกแนวทางหนึ่งที่เป็นที่รู้จักกันดีในกลุ่มโปรแกรมเมอร์มืออาชีพ นักพัฒนาเว็บ และเทคโนโลยีอื่นๆ ซึ่งก็คือ นิพจน์ทั่วไป (นิพจน์ทั่วไป = RegExp = “regexps” = “ปกติ”) พูดง่ายๆ ว่า RegExp เป็นภาษาที่ใช้อักขระพิเศษและกฎเพื่อค้นหาสตริงย่อยที่จำเป็นในข้อความ แยกหรือแทนที่ด้วยข้อความอื่น. นิพจน์ทั่วไปเป็นเครื่องมือที่ทรงพลังและสวยงาม ซึ่งเหนือกว่าวิธีอื่นๆ ทั้งหมดในการทำงานกับข้อความตามลำดับความสำคัญ ภาษาโปรแกรมหลายภาษา (C#, PHP, Perl, JavaScript…) และโปรแกรมแก้ไขข้อความ (Word, Notepad++…) รองรับนิพจน์ทั่วไป

น่าเสียดายที่ Microsoft Excel ไม่มีการสนับสนุน RegExp แบบสำเร็จรูป แต่สามารถแก้ไขได้ด้วย VBA เปิด Visual Basic Editor จากแท็บ ผู้พัฒนา (ผู้พัฒนา) หรือแป้นพิมพ์ลัด อื่น ๆ+F11. จากนั้นแทรกโมดูลใหม่ผ่านเมนู แทรก – โมดูล และคัดลอกข้อความของฟังก์ชันมาโครต่อไปนี้ที่นั่น:

ฟังก์ชันสาธารณะ RegExpExtract (ข้อความเป็นสตริง รูปแบบเป็นสตริง รายการเสริมเป็นจำนวนเต็ม = 1) เป็นสตริงเมื่อเกิดข้อผิดพลาด GoTo ErrHandl ตั้งค่า regex = CreateObject("VBScript.RegExp") regex.Pattern = รูปแบบ regex.Global = True หาก regex.Test (ข้อความ) จากนั้นตั้งค่าการแข่งขัน = regex.Execute(Text) RegExpExtract =match.Item(Item - 1) Exit Function End If ErrHandl: RegExpExtract = CVErr(xlErrValue) End Function  

ขณะนี้ เราสามารถปิด Visual Basic Editor และกลับไปที่ Excel เพื่อลองใช้คุณลักษณะใหม่ของเราได้แล้ว ไวยากรณ์ของมันคือต่อไปนี้:

=RegExpExtract ( Txt ; รูปแบบ ; รายการ )

ที่ไหน

  • TXT – เซลล์ที่มีข้อความที่เรากำลังตรวจสอบและเราต้องการแยกสตริงย่อยที่เราต้องการ
  • Belt hold – หน้ากาก (รูปแบบ) สำหรับการค้นหาสตริงย่อย
  • ชิ้น – หมายเลขลำดับของสตริงย่อยที่จะแยกออกมา หากมีหลายรายการ (หากไม่ได้ระบุ การแสดงครั้งแรกจะปรากฏขึ้น)

สิ่งที่น่าสนใจที่สุดคือรูปแบบ - สตริงเทมเพลตของอักขระพิเศษ "ในภาษา" ของ RegExp ซึ่งระบุว่าเราต้องการค้นหาอะไรและที่ไหน ต่อไปนี้คือสิ่งที่พื้นฐานที่สุดในการเริ่มต้น:

 แบบแผน  รายละเอียด
 . ที่ง่ายที่สุดคือจุด ตรงกับอักขระใด ๆ ในรูปแบบที่ตำแหน่งที่ระบุ
 s อักขระใดๆ ที่ดูเหมือนช่องว่าง (ช่องว่าง แท็บ หรือตัวแบ่งบรรทัด)
 S
แอนตี้-แวเรียนท์ของรูปแบบก่อนหน้านี้ กล่าวคือ อักขระที่ไม่ใช่ช่องว่าง
 d
หมายเลขใดก็ได้
 D
แอนตี้-แวเรียนท์ของอันก่อน นั่นคือ ใดๆ ที่ไม่ใช่ตัวเลข
 w อักขระละติน (AZ) ตัวเลขหรือขีดล่าง
 W แอนตี้-แวเรียนท์จากอันที่แล้ว นั่นคือ ไม่ใช่ละติน ไม่ใช่ตัวเลข และไม่ใช่ขีดล่าง
[อักขระ] ในวงเล็บเหลี่ยม คุณสามารถระบุอักขระได้ตั้งแต่หนึ่งตัวขึ้นไปที่ตำแหน่งที่ระบุในข้อความ ตัวอย่างเช่น ศิลปะ จะตรงกับคำใด ๆ : ตาราง or เก้าอี้.

คุณยังระบุอักขระไม่ได้ แต่ตั้งค่าให้เป็นช่วงที่คั่นด้วยเครื่องหมายยัติภังค์ เช่น แทนที่จะเป็น [ABCDEF] เขียน [เอเอฟ]. หรือแทน [4567] แนะนำ [-4 7]. ตัวอย่างเช่น หากต้องการกำหนดอักขระซีริลลิกทั้งหมด คุณสามารถใช้ template [a-yaA-ยาโยโย่].

[^อักขระ] หากหลังวงเล็บเหลี่ยมเปิดเพิ่มสัญลักษณ์ "ฝา" ^จากนั้นชุดจะได้รับความหมายที่ตรงกันข้าม - ที่ตำแหน่งที่ระบุในข้อความจะอนุญาตให้ใช้อักขระทั้งหมดยกเว้นที่ระบุไว้ ใช่ แม่แบบ [^ЖМ]อุต จะหา เส้นทาง or สสาร or ลืมแต่ไม่ น่ากลัว or ความกล้าหาญ, เช่น.
 | ตัวดำเนินการบูลีน OR (หรือ) เพื่อตรวจสอบเกณฑ์ใด ๆ ที่ระบุ ตัวอย่างเช่น (กับพฤ|sแม้แต่ | ใบแจ้งหนี้) จะค้นหาข้อความสำหรับคำใด ๆ ที่ระบุ โดยปกติ ชุดตัวเลือกจะอยู่ในวงเล็บ
 ^ จุดเริ่มต้นของบรรทัด
 $ ปลายสาย
 b จบคำ

หากเรากำลังมองหาตัวอักษรจำนวนหนึ่ง เช่น รหัสไปรษณีย์หกหลักหรือรหัสผลิตภัณฑ์ตัวอักษรสามตัวทั้งหมด เราก็มาช่วยชีวิต ปริมาณ or ปริมาณ เป็นนิพจน์พิเศษที่ระบุจำนวนอักขระที่จะค้นหา Quantifiers ถูกนำไปใช้กับตัวละครที่อยู่ข้างหน้า:

  ควอนเตอร์  รายละเอียด
 ? ศูนย์หรือหนึ่งเหตุการณ์ ตัวอย่างเช่น .? จะหมายถึงอักขระตัวใดตัวหนึ่งหรือไม่มีอยู่
 + หนึ่งรายการขึ้นไป ตัวอย่างเช่น d+ หมายถึงจำนวนหลักใดๆ (เช่น ตัวเลขใดๆ ระหว่าง 0 ถึงอนันต์)
 * เกิดขึ้นเป็นศูนย์หรือมากกว่านั้น กล่าวคือ ปริมาณใดๆ ดังนั้น s* หมายถึงจำนวนช่องว่างหรือไม่มีช่องว่าง
{จำนวน} or

{number1,number2}

หากคุณต้องการระบุจำนวนครั้งที่กำหนดไว้อย่างเคร่งครัด ให้ระบุในวงเล็บปีกกา ตัวอย่างเช่น ง{6} หมายถึงหกหลักอย่างเคร่งครัดและรูปแบบ ซ{2,5} – สองถึงห้าช่องว่าง

ตอนนี้ มาดูส่วนที่น่าสนใจที่สุดกันดีกว่า – การวิเคราะห์การใช้งานฟังก์ชันที่สร้างขึ้นและสิ่งที่เราเรียนรู้เกี่ยวกับรูปแบบจากตัวอย่างที่ใช้งานได้จริงจากชีวิต

การแยกตัวเลขออกจากข้อความ

ในการเริ่มต้น มาวิเคราะห์กรณีง่ายๆ – คุณต้องแยกตัวเลขแรกจากโจ๊กที่เป็นตัวอักษรและตัวเลข เช่น กำลังไฟของเครื่องสำรองไฟจากรายการราคา:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

ตรรกะที่อยู่เบื้องหลังนิพจน์ทั่วไปนั้นง่ายมาก: d หมายถึงตัวเลขใด ๆ และปริมาณ + บอกว่าจำนวนของพวกเขาควรเป็นหนึ่งหรือมากกว่า จำเป็นต้องใช้เครื่องหมายลบคู่ที่ด้านหน้าของฟังก์ชันเพื่อ "ในทันที" เพื่อแปลงอักขระที่แยกออกมาเป็นตัวเลขเต็มจากตัวเลขเป็นข้อความ

รหัสไปรษณีย์

เมื่อมองแวบแรก ทุกอย่างเรียบง่ายที่นี่ เรากำลังมองหาตัวเลขหกหลักติดต่อกัน เราใช้อักขระพิเศษ d สำหรับตัวเลขและปริมาณ 6 {} สำหรับจำนวนตัวอักษร:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

อย่างไรก็ตาม สถานการณ์เป็นไปได้เมื่อ ทางด้านซ้ายของดัชนีในบรรทัด มีตัวเลขอีกชุดใหญ่เรียงกัน (หมายเลขโทรศัพท์ TIN บัญชีธนาคาร ฯลฯ) จากนั้นฤดูกาลปกติของเราจะดึง 6 ตัวแรกออกมา ตัวเลขจากมัน กล่าวคือ จะทำงานไม่ถูกต้อง:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น เราจำเป็นต้องเพิ่มตัวแก้ไขรอบขอบของนิพจน์ทั่วไปของเรา b หมายถึงการสิ้นสุดของคำ สิ่งนี้จะทำให้ Excel เข้าใจได้ชัดเจนว่าส่วนย่อย (ดัชนี) ที่เราต้องการควรเป็นคำที่แยกจากกัน ไม่ใช่ส่วนหนึ่งของส่วนอื่น (หมายเลขโทรศัพท์):

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

เบอร์โทรศัพท์

ปัญหาในการค้นหาหมายเลขโทรศัพท์ในข้อความคือมีตัวเลือกมากมายในการเขียนตัวเลข ทั้งแบบมีขีดกลางและไม่มีขีดกลาง เว้นวรรค มีหรือไม่มีรหัสภูมิภาคในวงเล็บ เป็นต้น ดังนั้น ในความคิดของฉัน มันง่ายกว่าที่จะ ขั้นแรกให้ล้างอักขระเหล่านี้ทั้งหมดออกจากข้อความต้นฉบับโดยใช้ฟังก์ชันที่ซ้อนกันหลายรายการ ทดแทน (ทดแทน)ให้เกาะติดกันเป็นก้อนเดียว แล้วจึงรวมเป็นปึกแผ่น ง{11} ดึงออกมา 11 หลักในแถว:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

ไอที

ซับซ้อนกว่านี้เล็กน้อย เนื่องจาก TIN (ในประเทศของเรา) อาจเป็นตัวเลข 10 หลัก (สำหรับนิติบุคคล) หรือ 12 หลัก (สำหรับบุคคลธรรมดา) หากคุณไม่พบข้อบกพร่องโดยเฉพาะก็ค่อนข้างเป็นไปได้ที่จะพอใจกับปกติ ง{10,12}แต่พูดอย่างเคร่งครัดมันจะดึงตัวเลขทั้งหมดตั้งแต่ 10 ถึง 12 ตัวอักษรนั่นคือและป้อน 11 หลักผิดพลาด มันจะถูกต้องกว่าถ้าใช้สองรูปแบบที่เชื่อมต่อโดยตัวดำเนินการ OR แบบลอจิคัล | (แถบแนวตั้ง):

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

โปรดทราบว่าในข้อความค้นหา เราจะค้นหาตัวเลข 12 บิตก่อน จากนั้นจึงค้นหาเฉพาะตัวเลข 10 บิตเท่านั้น หากเราเขียนนิพจน์ทั่วไปของเราในทางกลับกัน มันจะดึงออกมาสำหรับทุกคน แม้กระทั่ง TIN 12 บิตแบบยาว เฉพาะ 10 อักขระแรกเท่านั้น นั่นคือ หลังจากทริกเกอร์เงื่อนไขแรกแล้ว การตรวจสอบเพิ่มเติมจะไม่ดำเนินการอีกต่อไป:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

นี่คือความแตกต่างพื้นฐานระหว่างตัวดำเนินการ | จากฟังก์ชันลอจิกมาตรฐานของ excel OR (หรือ)โดยที่การจัดเรียงอาร์กิวเมนต์ใหม่จะไม่เปลี่ยนแปลงผลลัพธ์

SKU ของผลิตภัณฑ์

ในหลายบริษัท ตัวระบุที่ไม่ซ้ำกันถูกกำหนดให้กับสินค้าและบริการ เช่น บทความ รหัส SAP SKU ฯลฯ หากมีเหตุผลในสัญกรณ์ ก็สามารถดึงออกจากข้อความได้อย่างง่ายดายโดยใช้นิพจน์ทั่วไป ตัวอย่างเช่น หากเราทราบว่าบทความของเราประกอบด้วยตัวอักษรภาษาอังกฤษตัวพิมพ์ใหญ่สามตัว ยัติภังค์และตัวเลขสามหลักถัดมา:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

ตรรกะเบื้องหลังเทมเพลตนั้นเรียบง่าย [แอริโซนา] – หมายถึงอักษรตัวพิมพ์ใหญ่ใดๆ ของอักษรละติน ตัวระบุถัดไป 3 {} บอกว่ามันเป็นสิ่งสำคัญสำหรับเราที่มีตัวอักษรดังกล่าวสามตัว หลังยัติภังค์เรารอเลขสามตัวจึงบวกต่อท้าย ง{3}

จำนวนเงินสด

ในทำนองเดียวกันกับย่อหน้าก่อนหน้า คุณสามารถดึงราคา (ต้นทุน, ภาษีมูลค่าเพิ่ม …) ออกจากคำอธิบายสินค้าได้ ตัวอย่างเช่น หากระบุจำนวนเงินด้วยยัติภังค์ ให้ทำดังนี้

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

แบบแผน d ด้วยปริมาณ + ค้นหาตัวเลขใด ๆ จนถึงขีดกลางและ ง{2} จะมองหาเพนนี (สองหลัก) หลังจากนั้น

หากคุณต้องการแยกไม่ใช่ราคา แต่เป็นภาษีมูลค่าเพิ่ม คุณสามารถใช้อาร์กิวเมนต์ทางเลือกที่สามของฟังก์ชัน RegExpExtract ซึ่งระบุหมายเลขลำดับขององค์ประกอบที่จะแยกได้ และแน่นอน คุณสามารถเปลี่ยนฟังก์ชันได้ ทดแทน (ทดแทน) ในผลลัพธ์ ให้ใส่ยัติภังค์กับตัวคั่นทศนิยมมาตรฐาน และเพิ่มเครื่องหมายลบสองครั้งที่จุดเริ่มต้น เพื่อให้ Excel ตีความ VAT ที่พบเป็นตัวเลขปกติ:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

ป้ายทะเบียนรถ

หากคุณไม่ได้ใช้ยานพาหนะพิเศษ รถพ่วง และรถจักรยานยนต์อื่นๆ หมายเลขรถมาตรฐานจะถูกแยกวิเคราะห์ตามหลักการ “ตัวอักษร – ตัวเลขสามตัว – ตัวอักษรสองตัว – รหัสภูมิภาค” นอกจากนี้ รหัสภูมิภาคอาจเป็นตัวเลข 2 หรือ 3 หลักก็ได้ และจะใช้เฉพาะรหัสที่มีลักษณะคล้ายกับตัวอักษรละตินเท่านั้นที่เป็นตัวอักษร ดังนั้นนิพจน์ทั่วไปต่อไปนี้จะช่วยเราดึงตัวเลขออกจากข้อความ:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

เวลา

หากต้องการแยกเวลาในรูปแบบ HH:MM นิพจน์ทั่วไปต่อไปนี้จะเหมาะสม:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

หลังจากเศษลำไส้ [0-5]ดเนื่องจากง่ายต่อการเข้าใจ จึงตั้งค่าตัวเลขใดๆ ในช่วง 00-59 ก่อนโคลอนในวงเล็บ รูปแบบสองรูปแบบทำงาน โดยคั่นด้วยตรรกะ OR (ไพพ์):

  • [0-1]ด – ตัวเลขใดๆ ในช่วง 00-19
  • 2[0-3] – ตัวเลขใดๆ ในช่วง 20-23

เพื่อให้ได้ผลลัพธ์ คุณสามารถใช้ฟังก์ชัน Excel มาตรฐานเพิ่มเติมได้ เวลา (ทีม)เพื่อแปลงเป็นรูปแบบเวลาที่โปรแกรมเข้าใจได้และเหมาะสมกับการคำนวณต่อไป

ตรวจสอบรหัสผ่าน

สมมติว่าเราต้องตรวจสอบรายการรหัสผ่านที่ผู้ใช้ประดิษฐ์ขึ้นเพื่อความถูกต้อง ตามกฎของเรา รหัสผ่านสามารถมีได้เฉพาะตัวอักษรภาษาอังกฤษ (ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่) และตัวเลขเท่านั้น ไม่อนุญาตให้เว้นวรรค ขีดล่าง และเครื่องหมายวรรคตอนอื่นๆ

การตรวจสอบสามารถจัดระเบียบได้โดยใช้นิพจน์ทั่วไปอย่างง่ายต่อไปนี้:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

อันที่จริงด้วยรูปแบบดังกล่าว เราต้องการให้ระหว่างจุดเริ่มต้น (^) และสิ้นสุด ($) ในข้อความของเรามีเพียงอักขระจากชุดที่กำหนดในวงเล็บเหลี่ยม หากคุณต้องตรวจสอบความยาวของรหัสผ่านด้วย (เช่น อย่างน้อย 6 อักขระ) ให้ระบุ quantifier + สามารถแทนที่ด้วยช่วงเวลา “หกหรือมากกว่า” ในรูปแบบ {6}:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

เมืองจากที่อยู่

สมมติว่าเราต้องดึงเมืองออกจากแถบที่อยู่ โปรแกรมปกติจะช่วยแยกข้อความจาก "g" ไปที่เครื่องหมายจุลภาคถัดไป:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

มาดูรูปแบบนี้กันดีกว่า

หากคุณได้อ่านข้อความข้างต้น แสดงว่าคุณเข้าใจแล้วว่าอักขระบางตัวในนิพจน์ทั่วไป (จุด เครื่องหมายดอกจัน เครื่องหมายดอลลาร์ ฯลฯ) มีความหมายพิเศษ หากคุณต้องการค้นหาอักขระเหล่านี้ด้วยตัวของมันเอง อักขระเหล่านี้จะถูกนำหน้าด้วยแบ็กสแลช (บางครั้งเรียกว่า การป้องกัน). ดังนั้นเมื่อค้นหาชิ้นส่วน “g” เราต้องเขียนด้วยนิพจน์ทั่วไป นาย. หากเรากำลังมองหาข้อดีอยู่แล้วล่ะก็ + เป็นต้น

อักขระ XNUMX ตัวถัดไปในเทมเพลตของเรา ได้แก่ จุดและดอกจันแสดงปริมาณ ย่อมาจากอักขระจำนวนเท่าใดก็ได้ เช่น ชื่อเมืองใดๆ

มีเครื่องหมายจุลภาคที่ส่วนท้ายของเทมเพลต เนื่องจากเรากำลังมองหาข้อความจาก "g" ไปที่เครื่องหมายจุลภาค แต่อาจมีเครื่องหมายจุลภาคหลายตัวในข้อความใช่ไหม ไม่เพียงแค่หลังเมืองเท่านั้น แต่ยังรวมถึงหลังถนน บ้าน ฯลฯ ด้วย คำขอของเราจะหยุดเพื่อใคร? นั่นคือสิ่งที่เครื่องหมายคำถามมีไว้สำหรับ หากไม่มีนิพจน์ทั่วไปของเราจะดึงสตริงที่ยาวที่สุดออกมา:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

ในแง่ของการแสดงออกปกติ รูปแบบดังกล่าวคือ "โลภ" ในการแก้ไขสถานการณ์ จำเป็นต้องใช้เครื่องหมายคำถาม - ทำให้ตัวระบุปริมาณหลังจากนั้นจะยืน "ตระหนี่" - และข้อความค้นหาของเราจะใช้ข้อความจนถึงเครื่องหมายจุลภาคตัวแรกหลังจาก "g" เท่านั้น:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

ชื่อไฟล์จากเส้นทางแบบเต็ม

สถานการณ์ทั่วไปอีกอย่างหนึ่งคือการดึงชื่อไฟล์ออกจากเส้นทางแบบเต็ม นิพจน์ทั่วไปอย่างง่ายของแบบฟอร์มจะช่วยได้ที่นี่:

แยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป (RegExp) ใน Excel

เคล็ดลับของที่นี่คือ แท้จริงแล้วการค้นหาเกิดขึ้นในทิศทางตรงกันข้าม - จากจุดสิ้นสุดไปยังจุดเริ่มต้น เพราะที่ส่วนท้ายของเทมเพลตของเราคือ $และเรากำลังมองหาทุกอย่างก่อนที่จะถึงแบ็กสแลชแรกจากทางขวา แบ็กสแลชเป็นอักขระหลีก เช่นเดียวกับจุดในตัวอย่างก่อนหน้า

PS

“ในตอนท้าย” ฉันต้องการชี้แจงว่าทั้งหมดข้างต้นเป็นเพียงส่วนเล็กๆ ของความเป็นไปได้ทั้งหมดที่นิพจน์ทั่วไปมีให้ มีอักขระและกฎพิเศษมากมายสำหรับการใช้งาน และมีการเขียนหนังสือทั้งเล่มในหัวข้อนี้ (ฉันขอแนะนำอย่างน้อยหนึ่งเล่มสำหรับการเริ่มต้น) การเขียนนิพจน์ทั่วไปเกือบจะเป็นศิลปะ เกือบทุกครั้ง นิพจน์ทั่วไปที่คิดค้นขึ้นสามารถปรับปรุงหรือเสริมได้ ทำให้ดูสวยงามยิ่งขึ้นหรือทำงานกับข้อมูลอินพุตที่หลากหลายขึ้น

ในการวิเคราะห์และแยกวิเคราะห์นิพจน์ทั่วไปของผู้อื่นหรือดีบักของคุณเอง มีบริการออนไลน์ที่สะดวกหลายอย่าง: RegEx101, RegExr และอื่น ๆ

ขออภัย คุณสมบัติบางอย่างของนิพจน์ทั่วไปแบบคลาสสิกไม่ได้รับการสนับสนุนใน VBA (เช่น การค้นหาแบบย้อนกลับหรือคลาส POSIX) และสามารถทำงานกับ Cyrillic ได้ แต่ฉันคิดว่าสิ่งที่มีอยู่เพียงพอสำหรับครั้งแรกที่จะทำให้คุณพอใจ

ถ้าคุณไม่ใช่คนใหม่ในหัวข้อนี้ และคุณมีสิ่งที่จะแบ่งปัน ปล่อยให้นิพจน์ทั่วไปมีประโยชน์เมื่อทำงานใน Excel ในความคิดเห็นด้านล่าง ใจเดียวก็ดี แต่รองเท้าคู่กัน!

  • การแทนที่และล้างข้อความด้วยฟังก์ชัน SUBSTITUTE
  • ค้นหาและเน้นตัวอักษรละตินในข้อความ
  • ค้นหาข้อความที่คล้ายกันที่ใกล้ที่สุด (Ivanov = Ivonov = Ivanof เป็นต้น)

เขียนความเห็น