python与正则表达式(part1)--元字符
本系列BLOG為鄙人學習python時的學習筆記。
文章目錄
- 元字符使用
- 普通字符
- 或關系?(從此知識點開始就是特殊字符了)
- 匹配單個字符
- 匹配字符集
- 匹配字符集反集
- 匹配字符串開始位置
- 匹配字符串的結束位置
- 匹配字符重復
- *
- +
- ?
- {n}
- {m,n}
- 匹配任意(非)數字字符
- 匹配任意(非)普通字符
- 匹配任意(非)空字符
- 匹配開頭結尾位置
- 匹配(非)單詞的邊界位置
元字符使用
備注:個別編程語言對元字符的支持略有不同,比如某些元字符在個別編程語言中可能不支持。
普通字符
匹配規則:每個普通字符匹配其對應的字符
例子1
In : re.findall('ab',"abcdefabcd") Out: ['ab', 'ab']注意!正則表達式在python中也可以匹配中文
例子2(支持UTF-8編碼格式的匹配)
In :re.findall('小黃', "小黃和大白") Out: ['小黃']或關系?(從此知識點開始就是特殊字符了)
元字符: |
匹配規則: 匹配 | 兩側任意的正則表達式即可
例子1
In : re.findall('com|cn',"www.baidu.com/www.tmooc.cn") Out: ['com', 'cn']匹配單個字符
元字符: .
匹配規則:匹配除換行外的任意一個字符
例子1
In : re.findall('小.兔',"小黃兔,大白兔,小兔") Out: ['小黃兔']匹配字符集
元字符: [字符集]
匹配規則: 匹配字符集中的任意一個字符
表達形式:
[abc#!好] #表示 [] 中的任意一個字符[0-9],[a-z],[A-Z] #表示區間(0-9或a-z或A-Z)內的任意一個字符[_#?0-9a-z] #混合書寫,一般區間表達寫在單個字符后面例子1
In : re.findall('[aeiou]',"How are you!") Out: ['o', 'a', 'e', 'o', 'u']例子2
re.findall('[-0-9]', "hello A-007") ['-', '0', '0', '7']匹配字符集反集
元字符:[^字符集]
匹配規則:匹配除了字符集以外的任意一個字符
例子1
In : re.findall('[^0-9]',"Use 007 port") Out: ['U', 's', 'e', ' ', ' ', 'p', 'o', 'r', 't']例子2
re.findall('[^-a-z ]', "hello A-007") ['A', '0', '0', '7']匹配字符串開始位置
元字符: ^
備注:這里的元字符和匹配字符集反集的元字符,雖然符號相同,但在正則表達式中的位置(該元字符必然放在最開頭)和所表達的含義都不同.
匹配規則:匹配目標字符串的開頭位置
例子1
In : re.findall('Jame',"hello, Jame") Out: ['Jame']In : re.findall('^Jame',"hello, Jame") Out: []In : re.findall('^Jame',"Jame,hello") Out: ['Jame']匹配字符串的結束位置
元字符: $
匹配規則: 匹配目標字符串的結尾位置
規則技巧: ^ 和 $必然出現在正則表達式的開頭和結尾處。如果兩者同時出現,則中間的部分必須匹配整個目標字符串的全部內容。
例子1
In : re.findall('Jame$',"Hi,Jame") Out: ['Jame']例子2
In :re.findall('Jame$',"Jame,Hi") Out: []In :re.findall('^Hi~Jame$',"Hi~Jame") Out: ['Hi~Jame']匹配字符重復
*
元字符: *
匹配規則:匹配前面的字符出現0次或多次
例子1
In : re.findall('wo*',"wooooo~~w!") Out: ['wooooo', 'w']例子2
In : print(re.findall('[A-Z][a-z]*',"Hello World, Hi Huang")) Out: ['Hello', 'World', 'Hi', 'Huang']+
元字符:+
匹配規則: 匹配前面的字符出現1次或多次
例子1
In : re.findall('[A-Z][a-z]+',"Hello World") Out: ['Hello', 'World']例子2
In :print(re.findall('[A-Z][a-z]*',"Hello World, A B C")) Out: ['Hello', 'World', 'A', 'B', 'C']In : print(re.findall('[A-Z][a-z]+',"Hello World, A B C")) Out: ['Hello', 'World']?
元字符:?
匹配規則: 匹配前面的字符出現0次或1次
例子1(匹配整數)
In [28]: re.findall('-?[0-9]+',"Jame,age:18, -26") Out[28]: ['18', '-26']{n}
元字符:{n}
匹配規則: 匹配前面的字符出現n次
例子1(匹配手機號碼)
In : re.findall('1[0-9]{10}',"Jame:13886495728") Out: ['13886495728']{m,n}
元字符:{m,n}
匹配規則: 匹配前面的字符出現m-n次
例子1(匹配QQ號)
In : re.findall('[1-9][0-9]{5,10}',"Baron:1259296994") Out: ['1259296994']匹配任意(非)數字字符
元字符: \d \D
匹配規則:\d 匹配任意數字(整數、小數、正數、負數)字符,\D 匹配任意非數字字符
例子1(匹配端口)
In : re.findall(\d{1,5}',"Mysql: 3306, http:80") Out: ['3306', '80']例子2
In :data = ''' 雨量是用雨量器和雨量杯來計算的,雨量器是個圓柱形的開口筒, 筒口面積在我國多為314平方厘米(直徑20厘米)。 為了防止降水蒸發,中上部呈一漏洞型,下部放一儲水瓶。 為觀測方便與上述口徑配套有一特制量杯,雨量杯的口徑為4厘米, 因此每一毫米降水量在雨量杯上的長度為25毫米。為了連續記錄液態降水量, 水文氣象部門多使用虹吸式雨量計或翻斗式遙測雨量計。它們的記錄紙,不但記錄了總降水量, 還可以判定不同時段的降水量或降水強度。以在平面收集到的雨水深度表示, 準確程度至0.25毫米或0.01寸。有時亦會以升每平方米 (1 L m-2 = 1 mm)表示。 在氣象統計名詞上,雨量又可稱為降雨量,即一定時間內之降水累積量, 其中,若降水量若小於0.1公厘視為雨跡。 ''' In : print(re.findall('-?\d+\.?\d*', data))Out: ['314', '20', '4', '25', '0.25', '0.01', '1', '-2', '1', '0.1']匹配任意(非)普通字符
元字符: \w \W
匹配規則: \w 匹配普通字符,\W 匹配非普通字符
說明: 普通字符指數字、字母、下劃線、漢字。
例子1
In : re.findall('\w+',"server_port = 8888") Out: ['server_port', '8888']例子2
In :re.findall('\W+',"server_port = 8888") Out: [' = ']匹配任意(非)空字符
元字符: \s \S
匹配規則: \s 匹配空字符,\S 匹配非空字符
說明:空字符指空格、\r 、\n 、\t 、\v 、\f 字符
例子1
In : re.findall('\w+\s+\w+',"hello world") Out: ['hello world']例子2
In :print(re.findall('\S+', "TUTU-12~#: fhgj")) Out: ['TUTU-12~#:', 'fhgj']匹配開頭結尾位置
元字符: \A \Z
匹配規則: \A 表示開頭位置(^),\Z 表示結尾位置($)
匹配(非)單詞的邊界位置
元字符: \b \B
匹配規則: \b 表示單詞邊界,\B 表示非單詞邊界
說明:單詞邊界指數字、字母(漢字)、下劃線[這些其實就是\w]與其他字符的交界位置。
例子1
In : print(re.findall('is', "This is XiaoHuang")) Out: ['is', 'is']In : print(re.findall(r'\bis\b', "This is XiaoHuang")) #這里的python字符串'\bis\b'前要加r Out: ['is'] #這里輸出的is,是第二個is(兩邊都有空格的is)備注:為啥這里的python字符串前要加r,我們之后(下一個blog)再解釋
例子2
In : print(re.findall(r'\Bis\b', "This is XiaoHuang")) Out: ['is'] #這里輸出的is,是第一個is(只有右邊都有空格的is)例子3(匹配大寫字母開頭的單詞)
In :print(re.findall(r'\b[A-Z]\w+',"This is iPython")) Out: ['This']總結
以上是生活随笔為你收集整理的python与正则表达式(part1)--元字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PIP的使用
- 下一篇: python与正则表达式(part2)-