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