2020年12月7日 星期一

正則表達式(3)-利用\d搜尋電話碼和姓名

 正則表達式(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

沒有留言:

張貼留言