2023年12月3日 星期日

用Python與正規表示式來分析和擷取字串

 文字內容摘自維基百科-國立虎尾科技大學

範例一、搜尋完整中文字詞

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('國立虎尾科技大學',s)
print(ans)

執行結果:
['國立虎尾科技大學']

範例二、搜尋其中一個符合的中文字詞

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('國立|虎尾|科技|大學',s)
print(ans)

執行結果:
['國立', '虎尾', '科技', '大學', '虎尾', '國立', '大學', '虎尾', '國立', '科技', '大學', '國立']

範例三、可以用中括號來搜尋其中一個符合的中文字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]',s)
print(ans)

執行結果:
['國', '立', '虎', '尾', '科', '技', '大', '學', '虎', '科', '虎', '科', '大', '虎', '尾', '科', '大', '國', '立', '大', '學', '虎', '尾', '國', '立', '科', '技', '大', '學', '大', '科', '學', '立', '科', '學', '立', '國', '立', '科', '學']

範例四、配對零個或多個字,越多越好

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]*',s)
print(ans)

執行結果:
['國立虎尾科技大學', '', '', '', '', '虎科', '', '虎科大', '', '虎尾科大', '', '', '', '國立', '', '', '', '', '大學', '', '', '', '', '', '', '', '', '虎尾', '', '', '', '', '國立科技大學', '', '', '', '', '', '', '', '', '', '', '', '', '', '大', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '科學', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '立', '', '', '', '', '', '科學', '', '', '', '', '', '', '', '', '', '立', '', '', '', '', '', '', '', '', '', '', '', '', '國立', '', '', '', '', '', '科學', '', '', '', '']

範例五、配對零個或多個字,越少越好

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]*?',s)
print(ans)

執行結果:
['', '國', '', '立', '', '虎', '', '尾', '', '科', '', '技', '', '大', '', '學', '', '', '', '', '', '虎', '', '科', '', '', '虎', '', '科', '', '大', '', '', '虎', '', '尾', '', '科', '', '大', '', '', '', '', '國', '', '立', '', '', '', '', '', '大', '', '學', '', '', '', '', '', '', '', '', '', '虎', '', '尾', '', '', '', '', '', '國', '', '立', '', '科', '', '技', '', '大', '', '學', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '大', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '科', '', '學', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '立', '', '', '', '', '', '', '科', '', '學', '', '', '', '', '', '', '', '', '', '', '立', '', '', '', '', '', '', '', '', '', '', '', '', '', '國', '', '立', '', '', '', '', '', '', '科', '', '學', '', '', '', '']

範例六、配對1個或多個字,越多越好

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]+',s)
print(ans)

執行結果:
['國立虎尾科技大學', '虎科', '虎科大', '虎尾科大', '國立', '大學', '虎尾', '國立科技大學', '大', '科學', '立', '科學', '立', '國立', '科學']

範例七、配對1個或多個字,越少越好
1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]+?',s)
print(ans)

執行結果:
['國', '立', '虎', '尾', '科', '技', '大', '學', '虎', '科', '虎', '科', '大', '虎', '尾', '科', '大', '國', '立', '大', '學', '虎', '尾', '國', '立', '科', '技', '大', '學', '大', '科', '學', '立', '科', '學', '立', '國', '立', '科', '學']

範例八、判斷開頭的文字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('^國立虎尾科技大學',s)
print(ans)

執行結果:
['國立虎尾科技大學']

範例九、列出不是要找的字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[^國立虎尾科技大學]',s)
print(ans)

執行結果:
[',', ' ', '簡', '稱', '、', '、', ',', '別', '稱', '福', '爾', '摩', '沙', ',', '位', '於', '台', '灣', '雲', '林', '縣', '鎮', '之', '一', '所', '。', '前', '身', '為', '雲', '林', '工', '專', ',', '為', '昔', '日', '三', '工', '專', '之', '一', '。', '1', '9', '8', '0', '年', '5', '月', '即', '開', '始', '籌', '設', '工', '業', '專', '校', ',', '到', '了', '7', '月', '正', '式', '創', '校', ',', '校', '名', '為', '「', '臺', '灣', '省', '雲', '林', '工', '業', '專', '校', '」', '。', '1', '9', '8', '1', '年', '省', '雲', '林', '工', '專', '改', '名', '配', '合', '更', '名', '為', '「', '雲', '林', '工', '業', '專', '校', '」', '。']

範例十、{n}連續配對n個字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]{4}',s)
print(ans)

執行結果:
['國立虎尾', '科技大學', '虎尾科大', '國立科技']

範例十一、{m,n}連續配對至少m個字到n個字,越多越好

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]{3,8}',s)
print(ans)

執行結果:
['國立虎尾科技大學', '虎科大', '虎尾科大', '國立科技大學']

範例十一、{m,n}連續配對至少m個字到n個字,越少越好
1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('[國立虎尾科技大學]{3,8}?',s)
print(ans)

執行結果:
['國立虎', '尾科技', '虎科大', '虎尾科', '國立科', '技大學']

範例十二、配對左邊且有右邊文字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('國立(?=虎尾)',s)
print(ans)

執行結果:
['國立']

範例十二、配對左邊且有右邊文字並顯示出來

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('國立(?=虎尾)..',s)
print(ans)

執行結果:
['國立虎尾']

範例十二、配對左邊且沒有右邊文字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('國立(?!虎尾)..',s)
print(ans)

執行結果:
['國立福爾', '國立科技', '國立雲林']

範例十二、配對左邊且有右邊文字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('..(?<=雲林)工業',s)
print(ans)

執行結果:
['雲林工業', '雲林工業']

範例十三、配對左邊且沒有右邊文字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('..(?<!雲林)工業',s)
print(ans)

執行結果:
['籌設工業']

範例十四、匹配數字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\d',s)
print(ans)

執行結果:
['1', '9', '8', '0', '5', '7', '1', '9', '8', '1']

範例十五、匹配數字,越多越好

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\d+',s)
print(ans)

執行結果:
['1980', '5', '7', '1981']

範例十五、匹配非數字,越多越好

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\D+',s)
print(ans)

執行結果:
['國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,位於台灣雲林縣虎尾鎮之一所國立科技大學。前身為雲林工專,為昔日三大工專之一。', '年', '月即開始籌設工業專科學校,到了', '月正式創校,校名為「臺灣省立雲林工業專科學校」。', '年省立雲林工專改名配合更名為「國立雲林工業專科學校」。']

範例十六、匹配一個空白字,並顯示後面2個字

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\s..',s)
print(ans)

執行結果:
[' 簡稱']

範例十六、匹配非空白字,並顯示所有的文字
1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\S+',s)
print(ans)

執行結果:
['國立虎尾科技大學,', '簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,位於台灣雲林縣虎尾鎮之一所國立科技大學。前身為雲林工專,為昔日三大工專之一。1980年5月即開始籌設工業專科學校,到了7月正式創校,校名為「臺灣省立雲林工業專科學校」。1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。']

範例十七、匹配一個中英文、數字或底線字元

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\w',s)
print(ans)

執行結果:
['國', '立', '虎', '尾', '科', '技', '大', '學', '簡', '稱', '虎', '科', '虎', '科', '大', '虎', '尾', '科', '大', '別', '稱', '國', '立', '福', '爾', '摩', '沙', '大', '學', '位', '於', '台', '灣', '雲', '林', '縣', '虎', '尾', '鎮', '之', '一', '所', '國', '立', '科', '技', '大', '學', '前', '身', '為', '雲', '林', '工', '專', '為', '昔', '日', '三', '大', '工', '專', '之', '一', '1', '9', '8', '0', '年', '5', '月', '即', '開', '始', '籌', '設', '工', '業', '專', '科', '學', '校', '到', '了', '7', '月', '正', '式', '創', '校', '校', '名', '為', '臺', '灣', '省', '立', '雲', '林', '工', '業', '專', '科', '學', '校', '1', '9', '8', '1', '年', '省', '立', '雲', '林', '工', '專', '改', '名', '配', '合', '更', '名', '為', '國', '立', '雲', '林', '工', '業', '專', '科', '學', '校']

範例十六、匹配一個中英文、數字或底線字元,可是是標點符號

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall('\W',s)
print(ans)

執行結果:
[',', ' ', '、', '、', ',', ',', '。', ',', '。', ',', ',', '「', '」', '。', '「', '」', '。']

範例十七、匹配\w和\W的邊界

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall(r'\b國......',s)
print(ans)

執行結果:
['國立虎尾科技大', '國立雲林工業專']

範例十八、匹配不在\w和\W的邊界

1
2
3
4
5
6
7
8
9
import re
s='國立虎尾科技大學, 簡稱虎科、虎科大、虎尾科大,別稱國立福爾摩沙大學,\
位於台灣雲林縣虎尾鎮之一所國立科技大學。\
前身為雲林工專,為昔日三大工專之一。\
1980年5月即開始籌設工業專科學校,到了7月正式創校,\
校名為「臺灣省立雲林工業專科學校」。\
1981年省立雲林工專改名配合更名為「國立雲林工業專科學校」。'
ans=re.findall(r'\B國.{6}',s)
print(ans)

執行結果:
['國立福爾摩沙大', '國立科技大學。']

沒有留言:

張貼留言