Python字符串及正则表达式
2012-12-20 15:25:04 来源:WEB开发网核心提示: 正则表达式元字符与语法图: 注意事项:正则表达式的嵌套需要使用“()”,例如(\d\d\d){2}代表的是六个数字\d\d\d{2}代表的是4个数字,正则表达式每个分组会自动拥有一个组号,Python字符串及正则表达式,从左向右分别表示为\1,\2…例如(abc)\1代表匹配ab
正则表达式元字符与语法图:
注意事项:
正则表达式的嵌套需要使用“()”,例如(\d\d\d){2}代表的是六个数字\d\d\d{2}代表的是4个数字。
正则表达式每个分组会自动拥有一个组号,从左向右分别表示为\1,\2…例如(abc)\1代表匹配abc两次。
三种间隔符号——“^”(代表匹配字符串首部子串),“$”(代表匹配结束部分的子串),“\b”(分隔单词)
findall() sub() subn()创建副本,不改变原字符串
sys.re模块使用:
findall(pattern,string,flags = 0); 搜索string,以列表形式返回全部能匹配的子串,例子:
s = "HELLO WORLD"
print re.findall(r"^hello",s)
print re.findall(r"^hello",s,re.I)
print re.findall("WORLD$",s)
print re.findall(r"wORLD$",s,re.I)
print re.findall(r"\b\w+\b",s)
print re.findall(r"^hello",s)
print re.findall(r"^hello",s,re.I)
print re.findall("WORLD$",s)
print re.findall(r"wORLD$",s,re.I)
print re.findall(r"\b\w+\b",s)
sub(pattern,repl,string,count = 0);使用repl替换string中每一个匹配的子串后返回替换后的字符串。 当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。 当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count用于指定最多替换次数,不指定时全部替换。subn(pattern,repl,string,count = 0); 返回 (sub(repl, string[, count]), 替换次数)。例子:
s = "hello world"
print re.sub("hello","hi",s) #不改变原字符串
print re.sub("hello","hi",s[-4:])
print re.sub("world","China",s[-5:])
print re.sub("hello","hi",s) #不改变原字符串
print re.sub("hello","hi",s[-4:])
print re.sub("world","China",s[-5:])
s = '你好 WORLD2'
print "匹配字母数字:" + re.sub(r"\w",'hi',s)
print "替换次数:" + str(re.subn(r"\w",'hi',s)[1])
print "匹配非字母数字:" + re.sub(r"\W",'hi',s) #这里一个汉字是两个字符
print "替换次数:" + str(re.subn(r"\W",'hi',s)[1])
print "匹配空白字符:" + re.sub(r"\s",'hi',s)
print "匹配数字字符:" + re.sub(r"\d",'hi',s)
print "匹配任意字符:" + re.sub(r".",'hi',s)
print "匹配字母数字:" + re.sub(r"\w",'hi',s)
print "替换次数:" + str(re.subn(r"\w",'hi',s)[1])
print "匹配非字母数字:" + re.sub(r"\W",'hi',s) #这里一个汉字是两个字符
print "替换次数:" + str(re.subn(r"\W",'hi',s)[1])
print "匹配空白字符:" + re.sub(r"\s",'hi',s)
print "匹配数字字符:" + re.sub(r"\d",'hi',s)
print "匹配任意字符:" + re.sub(r".",'hi',s)
re模块规则选项:
- re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
- M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
- S(DOTALL): 点任意匹配模式,改变'.'的行为
- L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
- U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
- X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。