2020年11月5日 星期四

正則表達式(1)-元字符

 正則表達式(1)-元字符

為我自己做一下筆記,發現很多爬蟲在做批配,如果用

if-elif-else好像就無法很精準,尤其在處理截取漢字的部

份,所以還是學一下正則幫助自己提升。

假設我以這個字串例

reg_string = "hello8734596python@blairanctk$.@!:xbwa;kdpijqwn,妳好喲"

然後我代入

import re

如果我要查找"blairan"😅我網路上使用的英文名啦

我就可以寫成一個簡單的批配碼

import re
reg_string = "hello8734596python@blairanctk$.@!:xbwa;kdpijqwn,妳好喲"
reg='blairan'
result=re.findall(reg, reg_string)
print(result)

得到的結果如下:

PS D:\python> & C:/Python38/python.exe d:/python/test3.py
['blairan']

假如字串裡有兩組一樣的排列字串,就會顯示兩組blaian在列表裡

import re
reg_string = "hello8734596python@blairanctk$.@!:xbwa;kdpijqwn,妳好喲blairan"
reg='blairan'
result=re.findall(reg, reg_string)
print(result)

PS D:\python> & C:/Python38/python.exe d:/python/test3.py
['blairan''blairan']

常見的元字符

Python中常見元字符及其含義如下:

元字符含義
.匹配除换行符以外的任意字符
\w匹配数字字母下划线汉字
\s匹配任意空白符
\d匹配所有的数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的开始结束

假設我現在要批配數字,我可以用\d

import re
reg_string = "hello8734596python@blairanctk$.@!:xbwa;kdpijqwn,妳好喲blairan"
reg='\d'
result=re.findall(reg, reg_string)
print(result)

PS D:\python> & C:/Python38/python.exe d:/python/test3.py
['8''7''3''4''5''9''6']

假如現在我想把"妳好喲"中文除外的字串找出來,可以寫成

import re
reg_string = "hello8734596python@blairanctk$.@!:xbwa;kdpijqwn,妳好喲blairan"
reg='[^妳好喲]'
result=re.findall(reg, reg_string)
print(result)

關於" ^ "符號是查找字串的開始

那現在我想要把大小寫英文字全都不要,可以這樣寫

import re
reg_string = "hello8734596python@blairanctk$.@!:xbwa;kdpijqwn,妳好喲blairan"
reg='[^a-zAZ]'
result=re.findall(reg, reg_string)
print(result)

PS D:\python> & C:/Python38/python.exe d:/python/test3.py
['8''7''3''4''5''9''6''@''$''.''@''!'':'';'',''妳''好''喲']

還有一種反義代碼,就是上面提到元字符的相反

Python中常见反義代碼 及其含義如下:

反義代碼含義
\W匹配任意不是数字字母下划线汉字的字符
\S匹配任意不是空白符的字符
\D匹配非数字
\B匹配不是单词的开始或结束
[^a]匹配除了a以外的任意字符
[^abcd]匹配除了abcd以外的任意字符

今天先紀錄到這裡,要消化的東西好多.....










沒有留言:

張貼留言