1、string string.capwords(s) 2、转换: leet=string.maketrans('abc','123') s.translate(leet) 3、模板
image.png
//substitute safe_substitute
4、textwrap:
textwrap.dedent 去除缩进
indent 增加缩进
缩进.strip() 填充
image.png
5、第一行不缩进,第二行后缩进4空格
image.png
6、re
match=re.search()
s=match.start()
e=match.end()
match.re.pattern
match.string
text[s:e]
image.png
7、re
re.compile、
re.search
match.groups
8 re
findall
9 finditer
return match list
10 ab*? 非贪婪匹配,b出现0次
11、re
\d
\D
\w
\W
\s
\S
^$
\b 在单词开头或末尾的空字符串
\B 不在单词开头或末尾的空字符串
\A 字符串开始
\Z 字符串结束
12、re
(?P<first_name>\w+)
名字
match.groupdict()
13、
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?<=pattern)
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
14、re.compile(pattern,re.IGNORECASE)
15、re.X
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入 RE,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之后。
16 (?i)不区分大小写
image.png
17、xx.sub替换
\1只替换一次
image.png
subn会返回替换后的值和替换的次数
18 difflib比较文件
d=difflib.Differ()
diff=d.compare(alist,blist)
print('\n'.join(diff))
19、unified_diff
image.png
20、difflib.SequenceMatcher(None,list1,list2)
reversed(macher.get_opcodes())
image.png
image.png