#-*- coding:utf-8 -*-
import re
1
#1------------------
line = 'booooooobaaaaooobbbbby123'
#
regex_str = '.*(b.*b).*'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#結(jié)果是 bb 這里是最后的兩個(gè)b金度,是貪婪的模式
2
#2------------------
# + 表示至少一次
line = 'booooooobaaaaooobbbbbay123'
#
regex_str = '.*(b.+b).*'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#匹配的結(jié)果是最后的3個(gè)b撵摆,對(duì)比一下第一個(gè)部凑,理解 + 號(hào)的意思镊折,表示至少一次
#如果我在最后兩個(gè)b中間加一個(gè)a抵窒,他會(huì)匹配到bab
3
#3------------------
#{2}表示前面的字符出現(xiàn)了兩次, {2,}表示出現(xiàn)了兩次以上 {2,5}表示出現(xiàn)了2-5次
line = 'boooobaaaaooobaaabbbabay123'
#任意字符出現(xiàn)很多次,貪婪到最后
regex_str = '.*(b.{2,5}b).*'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#結(jié)果是 bbab
4
#4------------------
# | 豎線是或的關(guān)系
line = 'bobby123'
#任意字符出現(xiàn)很多次孵坚,貪婪到最后
regex_str = '(bobby|bobby123)'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#匹配的結(jié)果是bobby付枫,如果我給第一個(gè)改成了Bobby10,則會(huì)匹配到后面的一個(gè)bobby123
5
#5------------------
# 多個(gè)括號(hào)怎么使用
line = 'bobby123'
#任意字符出現(xiàn)很多次狗热,貪婪到最后
regex_str = '((bobby|bobby)123)'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1)) #我們這里是第一個(gè)括號(hào)钞馁,所以只會(huì)匹配到外面的括號(hào)。括號(hào)在提取子字符串是很常用
#加了兩層的括號(hào)匿刮,會(huì)匹配到bobby123僧凰,只加一個(gè)括號(hào),則會(huì)匹配到bobby
6
#6------------------
# [] 里面的內(nèi)容只要滿足一個(gè)都是可以的
line = 'aobby123'
#任意字符出現(xiàn)很多次熟丸,貪婪到最后
regex_str = '([abc]obby123)'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#結(jié)果是aobby123
7
#7------------------
# 使用[]來匹配一次電話號(hào)碼
line = '15290875555'
#第一個(gè)數(shù)字是1训措,第二個(gè)數(shù)字是3587,接著出現(xiàn)了9個(gè)任意的數(shù)字
regex_str = '(1[3587][0-9]{9})'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#結(jié)果是匹配到了電話號(hào)碼 15290875555
8
#7------------------
# 使用[^]來測(cè)試一下 []里面的點(diǎn)就是點(diǎn)光羞,*號(hào)就是*號(hào)绩鸣,不再包含特殊含義,這個(gè)要注意
line = '15290875555'
#第一個(gè)數(shù)字是1纱兑,第二個(gè)數(shù)字是3587呀闻,接著出現(xiàn)了9個(gè)不是1的字符
regex_str = '(1[3587][^1]{9})'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#可以匹配到電話號(hào)碼,如果我把電話號(hào)碼改變成了15sssssssss潜慎,也是能匹配到的
9
#9------------------
# \s表示的是空格
line = '你 好'
#
regex_str = '(你\s好)'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
#將‘你 好’匹配到了捡多。如果是兩個(gè)空格就不行了蓖康,必須加上*號(hào)才行
#\S 表示的是非空格,假如我寫一個(gè)‘你很好’用‘你\S好’就可以匹配了垒手,因?yàn)椤堋皇且粋€(gè)空格
10
#10------------------
# \w 表示[a-zA-Z0-9_]蒜焊,\W表示的是相反的
line = '你a好'
#
regex_str = '(你[\w]好)'
match_obj = re.match(regex_str, line)
if match_obj:
#使用group,取第一個(gè)括號(hào)
print(match_obj.group(1))
來自慕課,