เนื่องจากมีเพื่อนๆ 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