1、re.match(pattern,string) 从目标字符串的开始进行匹配
pattern='aacccdddxxefxcz' #pattern也可以是字符
string='aacccdddxxefxcz123 python_3.2014212086'
result=re.match(pattern,string)# 没有匹配到结果的时候返回None
print(result)
print(result.span()) # 匹配信息的位置
print(result.group())# 匹配信息的内容
2、re.search(pattern,string) 扫描整个字符串并返回第一个成功的匹配
pattern='cd'
string='abcddddddefg123 python_3.5123abc'
result=re.search(pattern,string)
print(result)
print(result.span())
print(result.group())
3、re.findall(pattern,string)
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,如果匹配成功的部分发生交叉,则取先匹配成功的部分,是不放回的匹配
string='abcddPythonddddefg123Python_3.5123abc'
pattern='Python'
result=re.findall(pattern,string)# 匹配所有符合规则的元素,返回列表
print(result)
通用字符做原子
\d匹配数值字符 0-9 \D 取反
\w匹配字符数字中文下划线 \W 取反
\s匹配空白字符 \S 取反
.(点)#匹配除了换行符外所有字符
pattern='\d'
string='abcde123 PY_3.5 ? # % 中文 \n \t'
result=re.findall(pattern,string)
print(result)
pattern='[^\w\s]'
#[a-zA-Z0-9] [^\w\s]取反 [一二三四五六七八九十]
#[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
string='ybcdefg123 Python_3.5 a R $ % !'
result=re.findall(pattern,string)
print(result)
pattern='[^\w\s]'
#[a-zA-Z0-9] [^\w\s]取反 [一二三四五六七八九十]
#[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
string='ybcdefg123 Python_3.5 a R $ % !'
result=re.findall(pattern,string)
print(result)
5.1 边界限定元字符
pattern1='[a-zA-Z]$'# 匹配末尾位置
pattern2='^\d'# 匹配开头位置
string='123zc 123python_abc_3.5abc'
print(re.findall(pattern1,string))
print(re.findall(pattern2,string))
‘*’ 重复前面一个字符0~无穷次
‘+’ 重复前面一个字符1~无穷次
‘?’ 重复前面0-1次
{n} 重复n次 {n,}重复n次到无穷次 {n,m}重复n次到m次
pattern1='abcd*'
pattern2='abcd+'
pattern3='abcd?'
pattern4='abcd{2}'
pattern5='abcd{2,}' # 2-无穷次
pattern6='abcd{2,4}'# 2-4次
string='abcdddddddddefg123 python_3.5abc'
print(re.findall(pattern1,string)) #先重复无穷次再重复0次
print(re.findall(pattern2,string))
print(re.findall(pattern3,string)) #先重复无穷次再重复0次
print(re.findall(pattern4,string)) #重复2次
print(re.findall(pattern5,string)) #重复2-无穷次次
print(re.findall(pattern6,string)) #重复4次
pattern='python|php'
string1='abcdefg123 python_3.5abcphp'
string2='abcdefg123 php_3.5abc'
print(re.findall(pattern,string1))
print(re.findall(pattern,string2))
pattern='(\w{6})(\d.\d)'
# (\w{6})(\d.\d)_
string='abcdcdefcdcdg123python3.5_php_3.5abc'
result1=re.search(pattern,string)
result2=re.findall(pattern,string)
print(result1)
print(result2)
正则表达式中用于表示匹配数量的元字符如下:
? 重复0次或1次,等同于{0,1}
* 重复0次或更多次,等同于{0,}
+ 重复1次或更多次,等同于{1,}
{n,} 重复n次及以上
上面的表示匹配次数的元字符分为贪婪型和懒惰型2种类型。其表达式分别如下。
贪婪型 懒惰型
* *?
+ +?
{n,} {n,}?
贪婪型的匹配会去抓取满足匹配的最长的字符串,这个也是正则表达式的默认的模式。当我们不需要最长的匹配的时候就需要使用懒惰模式。
pattern1=r'.* '
pattern2=r'.*? '
string=r'my string is:zc132 name404 '
result1=re.findall(pattern1,string)
result2=re.findall(pattern2,string)
print(result1)
print(result2)
string='a1b2c3d4'
pattern='[0-9]'
result=re.split(pattern,string,2)# maxsplit指定次数
print(result)
print('a-b----c'.split('-'))
print(re.split('-+','a-b----c'))
string='a1 python b2c3d4 cython '
pattern='[cp]ython'
result=re.sub(pattern,'PHP',string,1)# count控制次数
print(result)