import re
string = 'I love FishC.com'
# 查找FishC是否在I love FishC.com中
c = re.search(r'FishC', string)
print(c)
# <re.Match object; span=(7, 12), match='FishC'>優化
# .表示換行符以外的任何字符,故匹配到第一個字符I
d = re.search(r'.', string)
print(d)
# <re.Match object; span=(0, 1), match='I'>spa
# .表示換行符以外的任何字符,故匹配到FishC
e = re.search(r'Fish.', string)
print(e)
# re.Match object; span=(7, 12), match='FishC'>string
# 若是想匹配.,則加反斜槓\
f = re.search(r'\.', string)
print(f)
# <re.Match object; span=(12, 13), match='.'>io
# 反斜槓加d,匹配任何字符,故匹配到1
g = re.search(r'\d',string + '123')
print(g)
# <re.Match object; span=(16, 17), match='1'>import
h= re.search(r'\d\d\d', string +'123456')
print(h)
# <re.Match object; span=(16, 19), match='123'>object
# 匹配IP地址
i = re.search(r'\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d','192.168.111.156')
# 這樣有三個問題:
# 1.這樣寫\d\d\d最大能夠匹配999,可是IP中最大的數字是255
# 2.有的IP點之間的數字是一位數或兩位數,這樣就匹配不到了
# 3.這樣寫太醜了
# 故下面開始優化
print(i)
# <re.Match object; span=(0, 15), match='192.168.111.156'>im
# 中括號來建立字符類,表示範圍,表示匹配到字符類中的任意一個字符就算匹配
# 字符類默認區分大小寫的
# 若是不想區分大小寫就能夠加上大寫的字母或關閉大小寫敏感
j = re.search(r'[aeiou]', string)
# <re.Match object; span=(3, 4), match='o'>
print(j)
k= re.search(r'[aeiouAEIOU]', string)
print(k)
# <re.Match object; span=(0, 1), match='I'>co
# 能夠在字符類中加上-表示範圍
l = re.search(r'[a-z]', string)
print(l)
# <re.Match object; span=(2, 3), match='l'>
m = re.search(r'[0-9]', string +'5678')
print(m)
# <re.Match object; span=(16, 17), match='5'>字符
# {}大括號解決匹配個數的問題,{3}表示前一個字符的3次,好比b{3}表示bbb
a = re.search(r'ab{3}c', 'abbbc')
print(a)
# <re.Match object; span=(0, 5), match='abbbc'>數字
# {3,10}表示前一個字符3次到10次,好比b{3,4}表示bbb或bbbb
a = re.search(r'ab{3,10}c', 'abbbbbbbbc')
# <re.Match object; span=(0, 10), match='abbbbbbbbc'>
print(a)
# 0-255的表示
a = re.search(r'[0-1]\d\d|2[0-4]\d|25[0-5]', '188')
# <re.Match object; span=(0, 3), match='188'>
print(a)
# 匹配IP地址# ()表示優先匹配,{0,1}表示能夠有0個或1個a = re.search(r'(([0-1]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([0-1]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])' ,'192.168.1.1')# <re.Match object; span=(0, 11), match='192.168.1.1'>print(a)