เนื่องจากมีเพื่อนๆ Inbox มาถามเกี่ยวกับการดึงค่าเพื่อใช้ในการตรวจสอบความถูกต้องของข้อมูล บางครั้งรูปแบบของข้อมูลไม่ได้มาในแบบที่พร้อมใช้งานได้เลย แต่จำเป็นต้องทำการปรับข้อมูลก่อน เช่น ราคาสินค้า 1,000.00 บาท โดยเราอาจจำเป็นต้องนำราคาสินค้าไปคำนวนต่อ เป็นเหตุให้เราต้องทำการแปลงข้อมูลก่อนนั่นเอง

Regular Expression คืออะไร

สรุปง่ายๆก็คือ ตัวช่วยการค้นหาข้อมูลจากกลุ่มคำที่มีความซับซ้อนสูง โดย Regular Expression จะมีเครื่องมือคัดกรองที่ยืดหยุ่น และมีประสิทธิภาพเป็นตัวช่วยนั่นเอง

ตัวอย่าง เรามี text ที่เก็บค่าราคาสินค้า “สินค้า หูฟัง v1 ราคา 1,000.00 บาท” แล้วเราจำเป็นต้องดึงค่าราคาออกมาเพื่อใช้ในการคำนวนยอดรวมสินค้า ดังนั้นสิ่งที่เราคาดหวังคือค่า 1000.00 นั่นเอง

โดยสำหรับ Regex สามารถเขียน คำสั่งได้ประมาณนี้ครับ

คำสั่ง [0-9,]+\.[0-9]{2} บาท

  • [0-9] คือ ตัวเลข จาก 0-9 จะเป็นตัวไหนก็ได้ครับ
  • [,] คือ คือ ตัวอักษร , นั่นเองครับ
  • + คือ การที่บอกว่าค่าข้างหน้าสามารถมีซ้ำได้เริ่มตั้งแต่หนึ่งตัว ตัวอย่าง [0-9]+ คือเราสามารถมีค่าตัวเลขซ้ำๆกันมากกว่าหนึ่งค่านั่นเอง
  • {2} คือ สัญลักษณ์ที่ไว้บอกว่า ค่าข้างหน้าต้องมีซ้ำกันกี่ตัวเช่น ตัวอย่าง [0-9]{2} ไว้หาทศนิยม 2 ตำแหน่งครับ

แนะนำฟังค์ชั่นที่ใช้บ่อยๆ

Quantification

  • ? question mark เป็นตัวช่วยแมทช์การแสดงค่าแบบไม่แสดงค่าเลย หรือ 1 ครั้ง เช่น
    colou?r สามารถแมทช์ “color” และ “colour”
  • * asterisk เป็นตัวช่วยแมทย์การแสดงค่าแบบ ไม่แสดงค่าเลยหรือมากกว่า 1 ครั้ง เช่น
    ab*c matches “ac”, “abc”, “abbc”, “abbbc”
  • + plus sign เป็นตัวช่วยแมทช์การแสดงค่า ตั้งแต่หนึ่งครั้ง
    ab+c matches “abc”, “abbc”, “abbbc” แต่จะไม่แมทช์กับ “ac”

Refs: https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285

ตัวอย่างการใช้งาน

ตัวอย่าง Robot framework test script

*** Settings ***
Library    String    

*** Test Cases ***
Example regex for product amount
    ${product amount} =    Get Regexp Matches    สินค้า หูฟัง v1 ราคา 1,000.50 บาท    ([0-9,]+\.[0-9]{2}) บาท    1
    ${product amount} =    Replace String    ${product amount}[0]    ,    ${EMPTY}
    ${product amount} =    Convert To Number    ${product amount}
    Should Be Equal As Numbers    1000.5    ${product amount}


Test result

Previous articleจะดีแค่ไหนถ้าเราแจ้งเตือน Test Fail บน Slack ได้
Next articleเทสเว็บ เร็วกว่า ง่ายกว่า เสถียรกว่า ด้วย Robot Framework Puppeteer