1. 程式人生 > >正則表示式學習——網址匹配

正則表示式學習——網址匹配

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
已上鍊接學習大全。

練習:請嘗試寫一個驗證Email地址的正則表示式。
【版本一】應該可以驗證出類似的Email:
[email protected]
[email protected]
【版本二】可提取出帶名字的Email地址:
[email protected] => Tom Paris
[email protected] => bob

# coding:utf-8
import re

regex = r'^(<[\w\_]+\s*\w+>\s)?(.*@.*.(org|com)$)'
m = re.compile(regex)
'''
	[]字符集;
	. 匹配除換行\n以外的任意字元
	* 匹配前一個字元0次或無限次
	+ 匹配前一個字元1次或無限次
	? 匹配前一個字元0次或1次
	| 表示式A|表示式B,任意一邊匹配。最好放在()中,不然匹配整個表示式
'''
if __name__ == '__main__':
	if m.match('
[email protected]
'): print('match [email protected]') if m.match('[email protected]'): print('match [email protected]') addr = '<Tom_ _Paris> [email protected]' if m.match(addr): print(addr) for i in [1, 2]: m_email = m.match(addr).group(i) print(m_email) regex_new = r'^<([\w\_]+\s*\w+)>\s' m2 = re.compile(regex_new) if m2.match(m.match(addr).group(1)): print(m2.match(m.match(addr).group(1)).group(1)) else: print('noname')

——————————————————————————
Python正則表示式學習——廖雪峰網站學習
\d 匹配數字
\w 匹配字母或數字
\s 匹配空格或Tab空白符
. 匹配任意字元;* 匹配變長任意字元;+ 至少一個字元;? 0或1個字元;{n} n個字元
進階
[ ]表示範圍
[0-9a-zA-Z_] 匹配一個數字、字母或下劃線;
A|B 或;^ 開頭;$ 結尾
re模組——包含正則表示式所有功能

import re
re.match(r'^\d{3}\-\d{3,8}$', '010-12345')

match()返回一個Match物件,否則返回None

test = '使用者輸入的字串'
if re.match(r'正則表示式', test):
    print('ok')
else:
    print('failed')

切分
分組

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

編譯
當我們在Python中使用正則表示式時,re模組內部會幹兩件事情:
1、編譯正則表示式,如果正則表示式的字串本身不合法,會報錯;
2、用編譯後的正則表示式去匹配字串。
如果一個正則表示式要重複使用幾千次,出於效率的考慮,我們可以預編譯該正則表示式,接下來重複使用時就不需要編譯這個步驟了,直接匹配:

>>> import re
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')