re.split
任意定界切分字符串
str.startswith() | str.endswith()
通过指定的文本模式去检查字符串的开头或者结尾
name.endswith(('.c', '.h'))
name.startswith(('http:', 'https:', 'ftp:')
from fnmatch import fnmatch, fnmatchcase
用Shell通配符匹配字符串
fnmatch('foo.txt', '*.TXT') 大小写是否敏感取决于操作系统
fnmatchcase('foo.txt', '*.TXT') 大小写敏感
re.match,re.find,re.findall,re.finditer
字符串匹配和搜索
str.replace,re.sub,re.subn
字符串搜索和替换
sub() 函数中的第一个参数是被匹配的模式,第二个参数是替换模式
re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
subn() 同sub,同时返回替换次数
newtext, n = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
re.sub('python', 'snake', text, flags=re.IGNORECASE)
以下函数解决忽略大小写后,保证被替换字符串与原有的保持一致
def matchcase(word):
def replace(m):
text = m.group()
if text.isupper():
return word.upper()
elif text.islower():
return word.lower()
elif text[0].isupper():
return word.capitalize()
else:
return word
return replace
非贪婪匹配添加?
跨行匹配
1. (.|\n)匹配所有字符,.是匹配除换行以外的所有字符
2. comment = re.compile(r'/\*(.*?)\*/', re.DOTALL)
import unicodedata
normalize() 第一个参数指定字符串标准化的方式。 NFC表示字符应该是整体组成(比如可能的话就使用单一编码),而NFD表示字符应该分解为多个组合字符表示
combining() 函数可以测试一个字符是否为和音字符
strip() 方法能用于删除开始或结尾的字符
lstrip() 和 rstrip() 分别从左和从右执行删除操作
str.replace() 字符替换
str.translate() 通过转换字典来替换
ljust() , rjust() 和 center() 字符串对齐
text.rjust(20,'=')
text.center(20,'*')
text.ljust(20)
format格式
format(text, '=>20s') 左边补全=到20个字符
format(text, '*^20s') 两边不全*到20个字符
format(text, '<20') 右边补全空格到20个字符
format(x, '^10.2f') 格式化浮点型总长度10,保留两位小数
str.join
字符串合并
打印输出时指定分隔符,无需合并
print(a, b, c, sep=':')
如果要被替换的变量能在变量域中找到, 可以结合使用 format_map() 和 vars()
>>> name = 'Guido'
>>> n = 37
>>> s.format_map(vars())
import textwrap
os.get_terminal_size() 获取终端的大小尺寸
print(textwrap.fill(s, os.get_terminal_size()))
from html.parser import HTMLParser
Html文本处理,将文本中的转义字符还原
p = HTMLParser()
p.unescape(s)
from xml.sax.saxutils import unescape
XML文本处理,将文本中的转义字符还原
unescape(s)
字符串令牌解析
import re
NAME = r'(?P<NAME>[a-zA-Z_][a-zA-Z_0-9]*)'
NUM = r'(?P<NUM>\d+)'
PLUS = r'(?P<PLUS>\+)'
TIMES = r'(?P<TIMES>\*)'
EQ = r'(?P<EQ>=)'
WS = r'(?P<WS>\s+)'
master_pat = re.compile('|'.join([NAME, NUM, PLUS, TIMES, EQ, WS]))
scanner = master_pat.scanner('foo = 42')
scanner.match() ## 可以持续调用,直到不匹配或字符串结束停止