有需求把類似 世界時 ‘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