iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 27
1
自我挑戰組

資工的日常系列 第 27

PYTHON regular expression 實戰

regular expression簡稱re,中文:正規表示式

首先推薦以下網頁學習:
Regular Expression介紹 中文網頁,而且把符號都說得很清楚!
http://120.105.184.250/cswang/thit/Linux/RegularExpression.htm
也是中文,甚至有些例子了
https://atedev.wordpress.com/2007/11/23/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F-regular-expression/
超棒的網頁,互動式學習。直接讓你下去練習,不得不去,練了就知道是抓到哪裡!
https://regexone.com/
他python re的方法介紹,剛剛也是在這裡學的
https://regexone.com/references/python
測試資料用的網頁,很清楚的標示抓到哪些字,group的區分。針對想找到某個規則的正則又有測式資料來這裡就對了。
https://regex101.com/


今天來用地址抓出地號。規則是抓出地號的數字如果有'-'號也要一起抓,以下是例子:
桃園市8德區中華段40地號->40
彰化縣花壇鄉花壇段1418-0000地號->1418-0000
臺中市南屯區埔興段35-12地號->35-12
桃園市蘆竹區內興段32地號->32
桃園市楊梅區大金山下段月眉山下小段1地號->1

有了測試資料就到https://regex101.com/ 找我們要的regex表達式。
1.\d找到數字
2.要找一整組的所以\d+,+代表1個以上
3.有可能有'-',但有些沒有所以用*,regex=\d+-*
4.'-'號後面還有數字\d+,但這樣單個數字的會抓不到,所以\d+-*\d*
5.注意第一個,8德的8不是我們要抓的,要找的是地號,資料格式是'段'後面才是地號。段\d+-*\d*
6.但'段'不是我要的東西,所以用()分開成第二group方便抓值。段(\d+-*\d*)這樣子我就可以從group(1)抓到我要的東西了。
https://ithelp.ithome.com.tw/upload/images/20180115/2010786652nPXTzTGk.png


程式碼

import re
string='臺中市南屯區埔興段35-12地號'
regex = re.compile(r'段(\d+-*\d*)')
match = regex.search(string)
print(match.group(1))

https://ithelp.ithome.com.tw/upload/images/20180115/20107866VgJ5eC8SWo.png


上一篇
HTML Bootstrap 4 Modal
下一篇
HTML Bootstrap 4 Tables
系列文
資工的日常30

尚未有邦友留言

立即登入留言