1 ตุลาคม 2557

Published ตุลาคม 01, 2557 by with 0 comment

Python Regular Expressions

สวัสดีครับทุกท่าน บทความนี้จะพูดถึงเรื่อง Python Regular Expressions กันครับ Regular Expressions (RegEx) คือ วิธีการตรวจสอบข้อมูล โดยกำหนดรูปแบบของสตริงที่ต้องการตรวจสอบที่เรียกว่า แพตเทิร์น(Pattern) มีต้นกำเนิดมาจากภาษา Perl ครับ

รูปแบบแพตเทิร์น(Pattern) ใน Python

Anchors
^ เริ่มต้นของสตริงหรือเริ่มต้นของบรรทัดในรูปแบบหลายบรรทัด
\A จุดเริ่มต้นของสตริง
$ สิ้นสุดของสตริงหรือจุดสิ้นสุดของเส้นในรูปแบบหลายบรรทัด
\Z สิ้นสุดของสตริง
\b ขอบเขตคำ
+ ตรงกับอย่างน้อยหนึ่งอักขระก่อนหน้านี้
* มีหรือไม่ก็ได้
| คือ "หรือ" , "OR"
haracter Classes
. (จุด) แทนตัวอักษรใด ๆ 1 ตัว ยกเว้นตัวอักษรขึ้นบรรทัดใหม่
\s เว้นบรรทัด
\S ไม่ได้เว้นบรรทัด
\B ไม่ขอบเขตคำ
< จุดเริ่มต้นของคำ
> สุดท้ายของคำ
\b ตรงกับขอบเขต string
\d แทนตัวเลข 0 ถึง 9
\D ตัวอักษรที่ไม่ใช่ตัวเลข
\w คำ
\W ไม่ใช่คำ
{จำนวนที่ซ้ำ} ระบุว่าต้องการการซ้ำซ้อนทั้งหมดกี่ตัว
อักขระพิเศษ
\n บรรทัดใหม่
\t Tab

กลุ่ม

(? ... ) Passive (ไม่จับ) กลุ่ม
[abc] ช่วง (A หรือ B หรือ C)
[^abc] ไม่ใช่ a หรือ b หรือ c
[a-z]    ใช้แทน a - z ตัวพิมพ์เล็ก
[a-z0-9]    ใช้แทน a-z ตัวพิมพ์เล็กและแทนเลข 0 - 9
[A-Z]    ใช้แทน A - Z ตัวพิมพ์ใหญ่
[A-Z0-9]    ใช้แทน A - Z ตัวพิมพ์ใหญ่และแทนเลข 0 - 9
[0-9]    ใช้แทนช่วง 0 - 9
ที่ผมยกมาด้านบนเป็นรูปแบบแพตเทิร์น(Pattern) ใน Python ที่ใช้กันบ่อย ๆ ครับ สำหรับเรื่อง รูปแบบแพตเทิร์น(Pattern) ไปศึกษารายละเอียดย่อย ๆ ได้ที่ http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
ในการใช้ Regular Expressions ใน  Python เราต้องใช้โมดูลที่มากับตัว Python ที่มีชื่อว่า re

findall

findall() เป็นฟังก์ชั่นที่มีประสิทธิภาพที่สุดในโมดูล re เราจะใช้ findall() ในการค้นหารูปแบบในตัวอย่างนี้

ผลลัพธ์
['Barack Obama', 'Bill Gates']

match

re.match()  ตรวจสอบว่า Regular Expressions ตรงที่จุดเริ่มต้นของสตริง เมื่อพบจะคืนค่า match object ออกมา ถ้าไม่พบจะคืนค่า None ออกมา ดังตัวอย่างต่อไปนี้
>>> import re
>>> m = p.match('tempo')
>>> m  
<_sre.SRE_Match object; span=(0, 5), match='tempo'>
ถ้าไม่พบข้อความ
>>> import re
>>> p.match("")
>>> print(p.match(""))
None

search

re.search() ใช้ค้นหารูปแบบภายในสตริงที่กำหนด ดังตัวอย่างต่อไปนี้
import re
print(re.search(r'\d\d\d', 'Your number is <b>123</b>').group(0))
ผลลัพธ์
123

การใช้ re.search() กับการเช็คเงื่อนไข if else
หากต้องการเช็คเงื่อนไข if else ว่าถ้าในสตริงมีรูปแบบที่ตรงกับรูปแบบ re ที่กำหนดไว้ ให้ทำเงื่อนไขใน if หากไม่ใช่ ให้ทำเงื่อนไขใน else สามารถทำได้โดยใช้โค้ดต่อไปนี้
ตัวอย่างเช่น หากกำหนดรูปแบบให้ค้นหา 0 - 9 หากพบให้แสดงเป็น 1 หากไม่พบ ให้แสดงเป็น 0
เขียนรูปแบบ re ได้เป็น [0-9]
ได้โค้ดดังนี้

ผลลัพธ์
1

sub

re.sub() เป็นคำสั่งที่ใช้แทนที่ตัวอักษรในสตริง ไม่ว่าจะเป็นคำหรือประโยค ดังตัวอย่างต่อไปนี้
import re
a = "คน เดิน ด้วย เครื่องบิน"
b = re.sub("เดิน", "บิน", a)
print(b)
ผลลัพธ์
คน บิน ด้วย เครื่องบิน

compile

re.compile() เป็นคำสั่งที่ใช้รวบรวมรูปแบบ (Pattern) เป็นวัตถุเก็บรูปแบบที่ต้องการ ดังตัวอย่างต่อไปนี้
import re
regex = re.compile(r'([a-z]+)', re.I)
print(regex.findall("123hello456world789"))
ผลลัพธ์
['hello', 'world']

split

re.split เป็นคำสั่งที่ใช้แยกสตริงตามที่กำหนด เราสามารถนำมาใช้ได้กับ Regular Expressions ดังตัวอย่างต่อไปนี้
>>> import re
>>> re.split('\W+','This... is a test.')
['This', 'is', 'a', 'test', '']
จบแล้วครับสำหรับเรื่อง Python Regular Expressions ครับ เวลาเรียกใช้ re ต่าง ๆ อย่าลืม import re กับตรวจสอบรูปแบบ Regular Expressions ให้ถูกต้องด้วยนะครับ
สำหรับท่าใดที่อยากลองเขียน Regular Expressions ดู สามารถเข้าไปลองเขียนเล่นได้ที่ http://re-try.appspot.com/ 
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)