แนะนำการใช้โมดูล re ใน Python เพื่อใช้ ค้นหาข้อความ

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
fonfonn
PHP VIP Members
PHP VIP Members
Posts: 2067
Joined: 11/07/2022 9:28 am

แนะนำการใช้โมดูล re ใน Python เพื่อใช้ ค้นหาข้อความ

Post by fonfonn »

ในบทความนี้จะเป็นการยกตัวอย่างการใช้งาน โมดูล re ใน Python เพิ่มเติมจาก Python Regular Expressions - The match Function เพิ่มเติม โดยโมดูล re นั้น จะสามารถใช้ในการค้นหาคำในประโยคยาวๆได้ ยกตัวอย่างจากโค้ด ต่อไปนี้ เราจะทำการรับค่า ชื่อบริษัท โดยหากมีการระบุสาขาในชื่อบริษัทแล้วก็ไม่ให้ขึ้นชื่อสาขาซ้ำกัน และในกรณีที่ ไม่มีสาขา ก็ให้ทำการเพิ่มสาขาหลังชื่อ บริษัท โดยจะทำการอธิบายโค้ดแต่ละส่วนไว้แล้ว

Code: Select all

import re
result = ''
customer = input("ชื่อบริษัท : ") #รับชื่อบริษัท
sub_brach = input("ชื่อสาขา : ") #รับชื่อสาขาบริษัท

edit_sub_brach = '('+sub_brach+')' #แปลงชื่อสาขาบริษัทที่รับมา ให้อยู่ในวงเล็บ

in_name_customer = re.search(sub_brach,customer, re.M|re.I) #ทำการค้นหา ชื่อสาขาใน ชื่อ บริษัท
# โดย ผลลัพธ์ที่ได้ จะเป็น <_sre.SRE_Match object; span=(12, 24), match='ข้อความที่ค้นหา'>

if in_name_customer: #ถ้าทำการค้นหาคำที่ต้องการเจอ
    in_name_customer2 = in_name_customer.group() #ทำการเปลี่ยนคำที่เจอชเป็นข้อความ

    in_name_customer2 = edit_sub_brach #ให้ความที่เจอเป็น ข้อความที่อยู่ในวงเล็บ

    if in_name_customer2 in customer: #ถ้าเจอข้อความที่อยู่ในวงเล็บ ในชื่อ customer
        result = customer #ให้ผลลัพธ์ คือ ชื่อ บริษัท ปกติ
        print(result)
    else: #ถ้าไม่เจอ ข้อความที่อยู่ในวงเล็บ ในชื่อ customer
        result = customer + edit_sub_brach #ให้ผลลัพธ์ คือ ชื่อ บริษัท + สาขา
        print(result)
else: #ถ้าไม่เจอคำที่ทำการค้นหาคำที่ต้องการเจอ
    result = customer + edit_sub_brach #ให้ผลลัพธ์ คือ ชื่อ บริษัท + สาขา
    print(result)
ผลการทำงาน
  • ในกรณี ชื่อ สาขาไม่ได้อยู่ในชื่อลูกค้าที่รับเข้า
    • ผลลัพธ์การทำงาน 1.jpg
      ผลลัพธ์การทำงาน 1.jpg (10.72 KiB) Viewed 127 times
      ผลลัพธ์การทำงาน 2.jpg
      ผลลัพธ์การทำงาน 2.jpg (14.73 KiB) Viewed 127 times
  • ในกรณี มีชื่อ สาขาอยู่ใน ชื่อลูกค้าอยู่แล้ว ก็จะไม่มีการใส่ชื่อสาขาซ้ำซ้อน
    • ผลลัพธ์การทำงาน 3.jpg
      ผลลัพธ์การทำงาน 3.jpg (11.78 KiB) Viewed 127 times
      ผลลัพธ์การทำงาน 4.jpg
      ผลลัพธ์การทำงาน 4.jpg (16.69 KiB) Viewed 127 times
  • ในกรณี มีชื่อซ้ำกับสาขาในชื่อลูกค้าเอง แต่ไม่ใช่ตัวบอกสาขา จึงต้องมีการระบุสาขาต่อท้าย
    • ผลลัพธ์การทำงาน 5.jpg
      ผลลัพธ์การทำงาน 5.jpg (12.78 KiB) Viewed 127 times
      ผลลัพธ์การทำงาน 6.jpg
      ผลลัพธ์การทำงาน 6.jpg (19.88 KiB) Viewed 127 times
จากการทำงานจะเป็นได้ว่า เราวามารถ ค้นหาคำในประโยคที่ได้ด้วยการใช้คำสั่ง re.search(ข้อความที่ต้องการหา,ประโยคทั้งหมด) และเมื่อเราจะนำข้อความนั้นไปใช้งานต่อนั้นจะต้องมีการแปลงให้ข้อความจากรุปแบบของ object เป็นข้อความก่อน ซึ่ง จะต้องอยู่ในรูปแบบของ If-else เพราะ การค้นหานั้นจะมีทั้งการค้นหาเจอและไม่เจอ การเขียน If-else ดักไว้ก่อนเพื่อไม่ให้การทำงานเออเร่อหากไม่หาข้อความที่ต้องการไม่เจอ
you're the only one treasure💎

Who is online

Users browsing this forum: No registered users and 14 guests