python re正則表達式學習

有需求把類似 世界時 ‘2019-06-06-00’ 與北京時 ‘2019/06/06 08:00’ 這樣的進行匹配

雖然可以if else + 索引去改,但是剛好想學一下正則表達式,就記錄一下

re.match(pattern, string, flags=0)

參數 描述
pattern 匹配的正則表達式
string 要匹配的字符串。
flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

 

 

 

 

 

dateOne = r'2019/06/06 08:00'
s1 = re.match(r'2.*9',dateOne) 
print(s1.span())
print(s1.group())
s2 = re.match(r'08:00',dateOne) 
print(s2)

輸出:
(0, 4)
2019
None

re.search(pattern, string, flags=0)

參數同re.match()

dateOne = r'2019/06/06 08:00'
s1 = re.search(r'2.*9',dateOne) 
print(s1.span())
print(s1.group())
s2 = re.search(r'08:00',dateOne) 
print(s2.span())
print(s2.group())

輸出:
(0, 4)
2019
(11, 16)
08:00

可以看到,re.match()只能從開頭開始匹配,re.search()會搜索整個字符串,返回匹配結果。

re.sub(pattern, repl, string, count=0, flags=0)

參數 描述
pattern 正則中的模式字符串
repl 替換的字符串,也可爲一個函數
string 要被查找替換的原始字符串
count 模式匹配後替換的最大次數,默認 0 表示替換所有的匹配

 

 

 

 

 

 

如果 repl 是一個字符串的話:

dateOne = r'2019/06/06 08:00'
s = re.sub(r'/','-',dateOne)
print(s)

輸出:
2019-06-06 08:00

如果repl是一個函數:

dateOne = r'2019/06/06 08:00'
s = re.sub(r'/','-',dateOne)
print(s)

def transform(matched):
    if matched.group() == ' 08:00':
        return '-00'
    elif matched.group() == ' 20:00':
        return '-12'
    else:
        return 'None'

s = re.sub(r' 08:00',transform,s)
print(s)

輸出:
2019-06-06 08:00
2019-06-06-00


re.compile(pattern[, flags])

用於編譯正則表達式,生成一個正則表達式( Pattern )對象

dateOne = r'2019/06/06 08:00'
pattern = re.compile(r'2019.*?6')
s1 = pattern.match(dateOne).group()
print(s1)
s2 = pattern.search(dateOne).group()
print(s2)
s3 = pattern.findall(dateOne)
print(s3)

輸出:
2019/06
2019/06
['2019/06']

關於group()的一些用法:

dateOne = r'2019/06/06 08:00'
pattern = re.compile(r'(\d*)/(\d*)/(\d*) (\d*):(\d*)')
s1 = pattern.match(dateOne)
print(s1.group(0))
print(s1.group(1))
print(s1.group(2))
print(s1.group(3))
print(s1.group(4))
print(s1.group(5))

輸出:
2019/06/06 08:00
2019
06
06
08
00
關於groupdict的一些用法:
dateOne = r'2019/06/06 08:00'
pattern = re.compile(r'(?P<YYYY>\d*)/(?P<MM>\d*)/(?P<DD>\d*) (?P<hh>\d*):(?P<mm>\d*)')
s1 = pattern.match(dateOne)
print(s1.groupdict())

dateOne = r'2019/06/06 08:00'
s1 = re.match(r'(?P<YYYY>\d*)/(?P<MM>\d*)/(?P<DD>\d*) (?P<hh>\d*):(?P<mm>\d*)',dateOne)
print(s1.groupdict())

輸出:
{'YYYY': '2019', 'MM': '06', 'DD': '06', 'hh': '08', 'mm': '00'}
可以看到用(?P<key>value)和groupdict()可以直接生產字典格式,很方便

修飾符、表達式模式等可以參考:

【1】https://www.runoob.com/python/python-reg-expressions.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章