python cookbook内容提炼-第二章 字符串和文本
这篇博客,我们继续cookbook内容提炼,这部分是关于字符串和文本处理的,都是干货,这篇博客比第一篇博客更重要,在实战开发中可以快速提升开发速度。
下面内容中 只有2.9和2.16不怎么用,其他的都是开发中很重要的技巧和知识点,感兴趣的可以好好学习学习。
2.1 使用多个界定符分割字符串
2.2 字符串开头或结尾匹配
2.3 用Shell通配符匹配字符串
2.4 字符串匹配和搜索
2.5 字符串替换
2.7 最短匹配模式
2.8 多行匹配模式
2.9 将Unicode文本标准化
2.10 在正则式中使用Unicode
2.11 删除字符串中不需要的字符
2.12 字符串对齐
2.13 合并拼接字符串
2.14 字符串中插入变量
2.15 以指定列宽格式化字符串
2.16 在字符串中处理html和xml
2.1 使用多个界定符分割字符串
问题:你需要将一个字符串分割为多个字段,但是分隔符(还有周围的空格)并不是固定的。
就是说,我们现在有一个字符串,想进行分割,但是分隔符不止一个,可能有很多个,这个使用正则表达式去实现的。
这个技巧很实用。
那么来看一下代码:
line = 'asdf fjdk;afed, fjek,asdf, foo'
import re
spstr=re.split(r'[;,\s]\s*',line)
print(spstr)
运行结果:
可以看到这个方法重点在于匹配模式的设置 ‘[;,\s]\s*’
来解释一下 ‘[;,\s]\s*’
这个这个其中’[;,\s] ; ,\s(也就是空格)都可以作为分割符 \s*则表示任意多个空格。
就是分割符可以是 逗号,分号或者是空格,并且后面紧跟着任意个的空格。
再看一下一些例子,方便大家理解。
line = 'asdf fjdk;afed, fjek,asdf, foo'
import re
spstr=re.split(r'[;,\s]\s*',line)
print(spstr)
print("*"*50)
s="fasojfiaoo dfaojf; dfjiaidfa, dfja da dfiaff;fdasf,dfa;"
spstr=re.split(r'[;,\s]\s*',s)
print(spstr)
print("*"*50)
s="fa;;fas ;,fa; fsfda"
spstr=re.split(r'[;,\s]\s*',s)
print(spstr)
可以看到 ; , 首先作为一个分隔符,如果后面还有空格,也只会进行一次分割,如果两个连续的 ;或者, 则会进行两次分割。
再看一下例子:
s="fa;;fas ;,fa; fsfda"
spstr=re.split(r'[;,\s]\s*;*,*',s)
print(spstr)
看一下结果:
对于这段知识点,我觉得不在于详细去说,而在去根据结果分析代码。
2.2 字符串开头或结尾匹配
这个就是判断字符串是否以另一段字符串为结尾或者开头。
来看一下代码就知晓了:
filename = 'spafsadfsafasm.txt'
print(filename.endswith('.txt'))
print(filename.endswith('.txx'))
print(filename.startswith('spafsa'))
print(filename.startswith('afsa'))
运行结果:
这个在开发中也是很常用的。
这个也支持多种后缀匹配:
filenames=[ 'Makefile', 'foo.c','bar.py', 'spam.c', 'spam.h' ]
res=[name for name in filenames if name.endswith(('.c',