一、使用多个界定符分割字符串
string 对象的split() 方法只适应于非常简单的字符串分割情形,它并不允许有
多个分隔符或者是分隔符周围不确定的空格。当你需要更加灵活的切割字符串的时候,
最好使用re.split() 方法:
首先记录一下正则表达式的规则
# 正则表达式
规则:
单字符:
. : 除换行以外所有字符
[] : 匹配集合中任意一个字符
\d : 数字
\D : 非数字
\w : 数字、字母、下划线、中文
\W : 非数字、字母、下划线、中文
\s : 空格
\S : 非空格
数量修饰:
* : 任意多次
+ : 至少1次
?: 非贪婪方式,可有可无
{m} : 固定m次
{m+} : 至少m次
{m,n} : m到n次
起始:
^ : 以啥啥开头
$ : 以啥啥结尾
常用组合和函数:
.* : 贪婪方式任意字符任意次数
.*? : 非贪婪方式任意字符任意次数
r = re.compile(r'正则表达式',re.S) :
最常用:将规则传递给某个参数以便反复使用
re.match\re.search\(字符串)
re.findall(字符串)
re.sub(正则表达式,替换内容,字符串)
下面介绍一下 多个界定符分割字符串
###来源于 python cookbook
line ='asdf fjdk; afed, fjek,asdf, foo'
import re
re.split(r'[;,\s]\s*',line)
Out[87]: ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
二、字符串开头或结尾匹配
检查字符串开头或结尾的一个简单方法是使用str.startswith() 或者是
str.endswith() 方法。比如:
filename = 'spam.txt' #定义变量
filename.endswith('.txt') #识别结尾
Out[95]: True
filename.startswith('file:') #识别开头
Out[96]: False
url = 'http://www.python.org' ##定义一个新变量
url.startswith('http:') #识别开头
Out[98]: True
#如果想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去,然后传
#给startswith() 或者endswith() 方法:
filenames=[ 'Makefile', 'foo.c', 'bar.py', 'spam.c', 'spam.h' ]
filenames
Out[103]: ['Makefile', 'foo.c', 'bar.py', 'spam.c', 'spam.h']
[name for name in filenames if name.endswith(('.c', '.h')) ]
Out[104]: ['foo.c', 'spam.c', 'spam.h']
any(name.endswith('.py') for name in filenames)
Out[105]: True
#另一个例子
from urllib.request import urlopen
def read_data(name):
if name.startswith(('http:', 'https:', 'ftp:')):
return urlopen(name).read()
else:
with open(name) as f:
return f.read()
url = 'http://www.python.org'
read_data(url)