Regular expression ม หร อ ไม ม ก ได

ข้อมูลอย่าง email เบอร์โทรศัพท์ ที่ข้อมูลเปลี่ยนตาม user แต่มี pattern ชัดเจน สามารถใช้ pattern ดึงข้อมูลโดยที่ไม่ต้องระบุข้อมูลได้! เรียนกับ Ultimate Python

เอกสารประกอบ

Regular Expression

คือ เครื่องมือที่ใช้ดึงข้อมูลที่ต้องการจาก string ผ่านการกำหนด pattern ของข้อมูลที่ต้องการดึงโดยที่ไม่ต้องระบุข้อมูลที่ต้องการ ทำให้เราสามารถดึงข้อมูลที่ไม่ตายตัว แต่มี pattern ชัดเจนได้ เช่น email ที่มีการระบุ @, เบอร์โทรศัพท์ที่มีจำนวนตัวเลขคงที่ และอื่นๆ

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

นำเข้าเครื่องมือ

ในการใช้งาน regualr expression เราจะใช้ library ที่ชื่อว่า re ซึ่งสามารถนำมาใช้งานได้ทันที สามารถใช้คำสั่ง import re ดังตัวอย่างด้านล่าง

In [1]: import re

การทำงานกับ Regular Expression

มีหลักสำคัญ คือ การทำความเข้าใจ pattern ของข้อมูลที่ต้องการ เพื่อระบุ pattern นั้นออกมาจาก string ที่เก็บข้อมูลนั้นๆ อยู่ หรือ ตรวจสอบว่ามี pattern ที่ระบุนั้นอยู่ใน string หรือไม่

การหาคำที่ต้องการ

จะใช้คำสั่ง .search() ที่จะรับ 2 ค่าคือ pattern และ string ที่ต้องการหาข้อมูล ซึ่งการระบุ pattern สามารถใช้ตัวอักษรที่ต้องการ หรือตัวอักษรพิเศษต่างๆ ที่ใช้สร้าง pattern โดยไม่ระบุตัวอักษรที่ต้องการค้นหาได้ เช่น

หา py ใน python

เราจะระบุ py เป็น pattern ในการค้นหา ใน string python ซึ่งเขียนได้ในลักษณะ เราจะได้ผลลัพธ์เป็น Match object ที่เก็บข้อมูลต่างๆ เช่น ตำแหน่งใน string ที่หา pattern เจอและคำที่หาเจอ หรือ match ตามที่ระบุตัวอักษร หรือ pattern ที่เจอใน string นั้นๆ

หากมีการเจอ pattern หลายครั้ง .search() จะดึงข้อมูลแรกที่หาเจอด้วย pattern โดยมีการค้นหาเรียงลำดับจาก index น้อยไปมากใน string

In [2]: re.search('py','python')

Out[2]: <re.Match object; span=(0, 2), match='py'>

หา py ใน pineapple

เราจะระบุ py เป็น pattern ในการค้นหา ใน string python ซึ่งเขียนได้ในลักษณะ สังเกตว่าเราจะได้ผลลัพธ์เป็น None ซึ่งแปลว่าไม่เจอ pattern ที่กำหนดใน string ที่กำหนด

In [3]: re.search('py','pineapple')

ข้อมูล Match

เมื่อได้ obejct match จาก .search() มา เราสามารถใช้คำสั่ง เพื่อดึงข้อมูลออกมาดูเพิ่มเติมได้

In [4]: result = re.search('py','python') result

Out[4]: <re.Match object; span=(0, 2), match='py'>

ตำแหน่งข้อมูลที่เจอ

ดูได้จาก method .span() จะได้ตำแหน่งของ pattern ที่ค้นหาเป็น tuple ของ เลขตำแหน่งเริ่มต้นของตัวอักษร และเลขตำแหน่งสุดท้ายของตัวอักษร

In [5]: result.span()

Out[5]: (0, 2)

ข้อมูลที่ดึงออกมาได้

โดยการดึงด้วยสัญลักษณ์ [ ] และระบุ index 0 ในลักษณะดังต่อไปนี้

In [6]: result[0]

Out[6]: 'py'

การหาคำที่ต้องการ หลายตำแหน่ง

เราจะใช้คำสั่ง .findall() แทนซึ่งจะทำให้เราสามารถดึงข้อมูลจากหลายตำแหน่งได้ ซึ่ง .findall() จะรับข้อมูล 2 อย่างเช่นเดียวกัน นั่นคือ pattern และ string ซึ่งผลลัพธ์ที่ได้จาก .findall() จะได้ list ที่เก็บข้อมูล string ที่ดึงมาได้โดยการใช้ pattern ค้นหาจากใน string ที่กำหนด

หา py ใน string

ในการหาคำว่า py หลายตำแหน่งใน string ที่กำหนด สามารถเขียนได้ในลักษณะดังนี้

In [2]: re.search('py','python')

0

In [2]: re.search('py','python')

1

การสร้าง pattern

สังเกตว่าหากเราใช้เพียงตัวอักษรปกติในการระบุข้อมูลที่เราต้องการ เป็นไปไม่ได้เลยที่เราจะได้ข้อมูลที่เราต้องการโดยการระบุ pattern เพราะเราต้องระบุข้อมูลที่ต้องการแบบเป๊ะๆ ทุกตัวอักษร

ซึ่งการสร้าง pattern เราจะใช้ตัวอักษรพิเศษแทนการใช้ตัวอักษรปกติ เพื่อกำหนด pattern ตามความหมายของแต่ละตัวอักษรพิเศษ แทนที่จะใช้คำที่ต้องการหา

การสร้าง pattern ด้วยตัวอักษรพิเศษ

ตัวอักษรพิเศษใน regular expression เป็นตัวอักษรที่มีความหมายสื่อถึง pattern ไม่ใช่ตัวอักษรที่เห็นได้ด้วยตาซึ่งมีหลายตัวให้เลือกใช้ประกอบเป็น pattern ที่ต้องการค้นหา

• wildcard

เป็นตัวอักษรพิเศษที่ใช้เพื่อสร้าง pattern เช่น . * ใช้เพื่อเป็นตัวแทนตัวอักษรต่างๆ หรือกำหนดการเกิดซ้ำ เช่น

. ตัวอักษรใดๆ

. สามารถใช้ระบุเป็น pattern เพื่อเป็นการแทนการมีอยู่ของ 1 ตัวอักษรใดๆ ในตำแหน่งของ . อย่างเช่น การค้นหาคำทุกคำที่มี 3 ตัวอักษรที่ขึ้นต้นด้วยตัวอักษรใดก็ได้ แต่ต้องลงท้ายด้วย at จาก string hat at car

สังเกตว่า ผลลัพธ์ที่ได้เป็น list ของ string ที่มีตัวอักษร 3 ตัว รวมไปถึงคำว่า ' at' ที่ประกอบด้วย เว้นว่าง 1 ตัวอัษร และ at

In [2]: re.search('py','python')

2

In [2]: re.search('py','python')

3

* ตัวอักษรที่เกิด เกิดซ้ำ หรือไม่เกิดขึ้น

สามารถใช้ * เพื่อกำหนดการเกิดซ้ำให้กับตัวอักษรด้านหน้าได้ ซึ่ง * เป็นตัวอักษรพิเศษที่หมายถึงให้ดูตัวอักษรด้านหน้า และตั้งเป็น pattern ที่มีการเกิดตัวอักษรซ้ำ หรือไม่เกิดขึ้น เช่น การดึง

In [2]: re.search('py','python')

4

In [2]: re.search('py','python')

5

+ ตัวอักษรที่เกิด หรือ เกิดซ้ำ

สามารถใช้ + เพื่อกำหนดการเกิดซ้ำให้กับตัวอักษรด้านหน้าได้ ซึ่ง + เป็นตัวอักษรพิเศษที่หมายถึงให้ดูตัวอักษรด้านหน้า และตั้งเป็น pattern ที่มีการเกิดตัวอักษรซ้ำ หรือไม่เกิดขึ้น เช่น การดึง

In [2]: re.search('py','python')

6

In [2]: re.search('py','python')

7

• set ของตัวอักษร

แทนที่เราจะหาตัวอักษรที่ระบุตายตัว 1 ตัว หรือการใช้เครื่องหมายที่กำตัวอักษรไว้ เช่น . หมายถึงทุกตัวอักษร เราสามารถสร้าง set ของตัวอักษรที่ต้องการประกอบการค้นหา โดยการใส่สัญลักษณ์ [ ] และใส่ตัวอักษรที่ต้องการเช็คไว้ระหว่าง [ ]

การใส่ set ตัวอักษร

ในการใช้ [ ] จะเป็นตัวแทนของ 1 ตัวอักษร ซึ่งเราสามารถใส่ตัวอักษรที่ต้องการค้นหาลงไประหว่าง [ ] เช่น ต้องการหาคำที่ ขึ้นต้นด้วย py หรือ Py เขียนเป็น set ได้เป็น [Pp]y ที่กำหนดตัวแรกเป็นไปได้ 2 ตัวอักษร และต้องตามด้วย y

In [2]: re.search('py','python')

8

In [2]: re.search('py','python')

9

การใส่ set ตัวอักษรเป็นช่วง

ในการกำหนด set ด้วย [ ] เราสามารถใส่ตัวอักษรที่สนใจเป็นช่วงอย่าง a-z A-Z 0-9 ลงไปใน [ ] ได้ เช่น การกำหนดตัวอักษรที่เป็นตัวอักษรภาษาอังกฤษทั้งตัวใหญ่ตัวเล็กเขียนได้ในลักษณะนี้ [a-zA-Z]

Toplist

โพสต์ล่าสุด

แท็ก

แปลภาษาไทย ไทยแปลอังกฤษ โปรแกรม-แปล-ภาษา-อังกฤษ พร้อม-คำ-อ่าน ห่อหมกฮวกไปฝากป้าmv แปลภาษาอาหรับ-ไทย lmyour แปลภาษา ข้อสอบคณิตศาสตร์ พร้อมเฉลย แปลภาษาอังกฤษเป็นไทย pantip ระเบียบกระทรวงการคลังว่าด้วยการจัดซื้อจัดจ้างและการบริหารพัสดุภาครัฐ พ.ศ. 2560 แอพแปลภาษาอาหรับเป็นไทย ห่อหมกฮวกไปฝากป้า หนังเต็มเรื่อง แปลภาษาเวียดนามเป็นไทยทั้งประโยค Google Translate การ์ดแคปเตอร์ซากุระ ภาค 4 หยน อาจารย์ ตจต เมอร์ซี่ อาร์สยาม ล่าสุด ศัพท์ทหาร ภาษาอังกฤษ pdf ห่อหมกฮวกไปฝากป้า คาราโอเกะ app แปลภาษาไทยเป็นเวียดนาม การ์ดแคปเตอร์ซากุระ ภาค 3 บบบย ศัพท์ทหารบก แปลภาษาจีน การประปาส่วนภูมิภาค การ์ดแคปเตอร์ซากุระ ภาค 1 ขุนแผนหลวงปู่ทิม มีกี่รุ่น ชขภใ ตม.เชียงใหม่ เซ็นทรัลเฟสติวัล พจนานุกรมศัพท์ทหาร รหัสจังหวัด อําเภอ ตําบล รหัสประจำจังหวัด 77 จังหวัด สอบโอเน็ต ม.3 จําเป็นไหม หนังสือราชการ ตัวอย่าง ห่อหมกฮวกไปฝากป้า คอร์ด อเวนเจอร์ส ทั้งหมด แปลภาษา มาเลเซีย ไทย ไทยแปลอังกฤษ ประโยค ่้แปลภาษา Egp G no Reconguista Google map ขุนแผนหลวงปู่ทิมรุ่นแรก ข้อสอบภาษาไทยพร้อมเฉลย ข้อสอบโอเน็ต ม.3 ออกเรื่องอะไรบ้าง ค้นหา ประวัติ นามสกุล จองคิว ตม เชียงใหม่ ชื่อเต็ม ร.9 คําอ่าน ดีแม็กมือสองราคาไม่เกิน350000 ตัวอย่างรายงานการประชุมสั้นๆ