正則表達式(3)-利用\d搜尋電話碼
我們的行動電話在字面上通常都是0912-123-456
可以利用 r'\d\d\d\d-\d\d\d-\d\d\d' ,來搜尋。
例如:
我得到一個字串如下:
msg='群主有事外出,如果有事請播打0923-345-678'
我想把行動電話取出來,那我可以用正則的search寫成:
import re
msg='群主有事外出,如果有事請播打0923-345-678'
PN=r'\d\d\d\d-\d\d\d-\d\d\d'
search=re.search(PN, msg)
print(search.group())
re.search(正則, 字串)配合group()所得到的是字串
得到的結果:
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
0923-345-678
另外也可以使用findall(),得到是list
import re
msg='群主有事外出,如果有事請播打0923-345-678'
PN=r'\d\d\d\d-\d\d\d-\d\d\d'
search=re.findall(PN, msg)
print(search)
結果
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
['0923-345-678']
上面例子裡利用\d查找行動電話,但寫了很多\d也不是很方便,還好有
簡化的方法,例如:\d\d\d\d可以寫成\d{4},\d\d\d可以寫成\d{3}。
import re
msg='群主有事外出,如果有事請播打0923-345-678'
PN=r'\d{4}-\d{3}-\d{3}'
search=re.findall(PN, msg)
print(search)
那麼市內電話要怎麼提取
import re
msg='群主有事外出,如果有事請播打03-8456789'
PN=r'\d{2}-\d{6}'
search=re.findall(PN, msg)
print(search)
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
['03-845678']
也可以把區碼和本地市話分開
import re
msg='群主有事外出,如果有事請播打03-8456789'
PN=r'(\d{2})-(\d{6})'
search=re.findall(PN, msg)
print(search)
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
[('03', '845678')]
如果要查找一個或多個同樣的英文姓名呢?
可以利用*(重覆多次)的符號
import re
msg='blairan will to meet with blairan tonight.'
name=r'blairan*'
search=re.findall(name, msg)
print(search)
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
['blairan', 'blairan']
或者要找blairan和另一個人的名字可以用' | '(符號前後不能留空白)
import re
msg='blairan and mai will to meet tonight.'
name=r'blairan|mai'
search=re.findall(name, msg)
print(search)
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
['blairan', 'mai']
另外一提:
假如名字裡有重覆字串,可以使用(重覆的字串)*
import re
msg='blairairairan'
name=r'bl((air)*an)'
search=re.search(name, msg)
print(search.group())
PS D:\python> & "C:/Program Files (x86)/python3.9.0/python.exe" d:/python/test1.py
blairairairan
沒有留言:
張貼留言