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

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