python re模块关于正则表达式
2018-06-06 本文已影响0人
bboyAyao
match函数:
表示从头开始匹配。

import re
ret = re.match('.', '\nabc',re.DOTALL)
print(ret)
"."的含义为匹配所有字符,除了\n,第三个参数加上 re.DOTALL,表示匹配任何一个字符,包括\n。 # re.I 表示忽略大小写
import re
ret = re.match('\w', '_sdfsdf',re.ASCII)
print(ret)
"\w"表示匹配 “_”下划线,大小写所有字母,数字0-9,及所有国家的语言,加上 re.ASCII 表示只匹配ASCII编码表中对应的字符。
匹配中文字符的正则表达式:
[\u4e00-\u9fa5]
匹配多个字符的表达式:

注意:
import re
ret = re.match("[1-9]","0")
print(ret)
#---------------运行结果--------------------------
None
匹配失败,返回None,如果用group函数提取匹配参数会报错
import re
ret = re.match("[1-9]*","0")
print(ret)
#---------------运行结果--------------------------
<_sre.SRE_Match object; span=(0, 0), match=''>
同样匹配失败,但 * 允许匹配字符出现0次,用空字符代替。用group函数提匹配字符不会报错。返回空字符串。
表示边界:

import re
ret1 = re.match("[\w]{4,20}@163\.com", "xiaoWang@163.comheihei")
print(ret1)
ret2 = re.match("[\w]{4,20}@163\.com$", "xiaoWang@163.comheihei")
print(ret2)
#-------------------运行结果---------------------
<_sre.SRE_Match object; span=(0, 16), match='xiaoWang@163.com'>
None
虽然 ret1 匹配成功,但原来提取的字符串并不是真正的邮箱!!(com后面带有heihei)
ret2 加上$ 保证原字符串是真正的邮箱!!!
match方法和search方法:
match从头开始匹配,search从任意位置开始匹配,都只匹配一次。
import re
pattern = re.compile('\d+')
m = pattern.search('one12twothree34four') 这里如果使用 match 方法则不匹配
print(m.group())
#---------------------运行结果-----------------
12 匹配成功
findall方法:
import re
pattern = re.compile(r'\d+') # 查找数字
result1 = pattern.findall('hello 123456 789')
result2 = pattern.findall('one1two2three3four4', 0, 10)
print result1
print result2
#---------------------运行结果--------------------
['123456', '789']
['1', '2']
sub方法:
import re
p = re.compile(r'(\w+) (\w+)') # \w = [A-Za-z0-9]
s = 'hello 123, hello 456'
print p.sub('hello world', s) # 使用 'hello world' 替换 'hello 123' 和 'hello 456'
print p.sub(r'\2 \1', s) # 引用分组
def func(m):
return 'hi' + ' ' + m.group(2)
print p.sub(func, s)
print p.sub(func, s, 1) # 最多替换一次
#--------------------------运行结果-----------------------------
hello world, hello world
123 hello, 456 hello
hi 123, hi 456
hi 123, hello 456
匹配分组:
