Python3 正则表达式
最简单的正则表达式为普通字符串,与它自己匹配。换而言之,正则表达式 'python' 与字符串 'python' 匹配
通配符
正则表达式可与多个字符串匹配,你可使用特殊字符来创建这种正则表达式
句点与除换行符外的其他字符都匹配且只与一个字符匹配
'.ython' 与字符串 'python' 和 'jython' 都匹配
对特殊字符进行转义
普通字符只与自己匹配,但特殊字符的情况完全不同。要让特殊字符的行为与普通字符一样,可对其进行转义:在它前面加上一个反斜杠
可使用模式 'python\\.org' ,它只与 'python.org' 匹配,也可使用原始字符串,如 r'python\.org' 。
指定排除字符集,可在开头添加一个 ^ 字符,例如 '[^abc]' 与除a、b和c外的其他任何字符都匹配
字符集
匹配任何字符很有用,可以用方括号将一个子串括起,创建一个所谓的字符集。这样的字符集与其包含的字符都匹配,例如 '[pj]ython' 与 'python' 和'jython' 都匹配,但不与其他字符串匹配。你还可使用范围,例如 '[a-z]' 与a~z的任何字母都匹配。你还可组合多个访问,方法是依次列出它们,例如 '[a-zA-Z0-9]' 与大写字母、小写字母和数字都匹配。请注意,字符集只能匹配一个字符。
脱字符( ^ )位于字符集开头时,除非要将其用作排除运算符,否则必须对其进行转义。换而言之,除非有意为之,否则不要将其放在字符集开头。 同样,对于右方括号( ] )和连字符( - ),要么将其放在字符集开头,要么使用反斜杠对其进行转义。实际上,如果你愿意,也可将连字符放在字符集末尾
二选一和子模式:管道字符( | )
有时候你不想将二选一运算符用于整个模式,而只想将其用于模式的一部分。为此,可将这部分(子模式)放在圆括号内。对于前面的示例,可重写为 'p(ython|erl)'
可选模式和重复模式
通过在子模式后面加上问号,可将其指定为可选的,即可包含可不包含
(pattern)* : pattern 可重复0、1或多次。
(pattern)+ : pattern 可重复1或多次。
(pattern){m,n} :模式可从父 m ~ n 次。
字符串的开头和末尾
字符串的开头是否与模式 'ht+p' 匹配,为此可使用脱字符( '^' )来指出这一点。例如, '^ht+p' 与 'http://python.org' 和 'htttttp://python.org'匹配。要指定字符串末尾,可使用美元符号( $ )。
函数
函数 re.search 在给定字符串中查找第一个与指定正则表达式匹配的子串
函数 re.split 根据与模式匹配的子串来分割字符串。例如,使用字符串方法 split 时,可以字符串 ', ' 为分隔符来分割字符串,但使用 re. split 时,可以空格和逗号为分隔符来分割字符串。参数 maxsplit 指定最多分割多少次
re.escape 是一个工具函数,用于对字符串中所有可能被视为正则表达式运算符的字符进行转义
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)
参数描述
pattern匹配的正则表达式
string要匹配的字符串。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例
sub函数
re.sub(pattern, repl, string, count=0, flags=0)
pattern : 正则中的模式字符串。repl : 替换的字符串,也可为一个函数。string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。flags : 编译时用的匹配模式,数字形式。
compile 函数
参数:
pattern : 一个字符串形式的正则表达式
flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和' # '后面的注释
OS模块
#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)result = os.getcwd()print(result)
result = os.getcwd()
print(result)
#chdir()改变当前工作目录
datetime模块:https://www.jianshu.com/p/9408261049a6
naive datetime:是没有时区信息的时间类型
datetime.date:date部分只含有年 月 日信息
datetime.time:time部分只含有时 分 秒 微秒
datetime.datetime:datetime部分包含date和time两部分的信息,也就是包含年 月 日 时 分 秒 微秒
tday = datetime.date.today()本地时间
tdelta = datetime.timedelta(days=7)七天后时间
print('今天的日期:{}'.format(tday))
# 打印七天后的日期
print('从今天向前推7天:{}'.format(tday + tdelta))
日期相加减运算规律
datetime.date对象 = datetime.date对象 ± datetime.timedelta对象
datetime.timedelta对象 = datetime.date对象 ± datetime.date对象
datetime.datetime.today()返回本地datetime,不会返回时区
datetime.datetime.now()返回本地datetime,且可以返回时区,如果你在括号种不传入时区,today()和now()就是一样的
datetime.datetime.utcnow()返回UTC时间,北京时间就是UTC+8
aware datetime
字符串和datetime之间的转化
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身