正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配。
应用:快速检索文本、实现一些替换文本的操作。
- 检查一串数字是否是电话号码。
- 检测一个字符串是否符合email。
- 把一个文本里指定的单词替换为另外一个单词。
import re #里面有很多函数
r = re.findall(‘\d’,a):找出字符里的数字
‘Python’ 普通字符 ‘\d’元字符
r = re.findall(‘a[cf]c’,s):匹配中间是c或者f的
r = re.findall(‘a[^cfd]c’,s):匹配中间不是c或f或d的
r = re.findall(‘a[c-f]c’,s):匹配中间的是c到f的
\w:匹配的是一个单词字符,下划线也可以匹配出来。
\s:匹配空白字符,\S:匹配的是非空白字符
r = re.findall(‘[a-z]{3}’,a):3表示个数
r = re.findall(‘[a-z]{3,6}’,a):表示3个到6个
正则表达式:贪婪与非贪婪,倾向于全部都包含进去
r = re.findall(‘[a-z]{3,6}?’,a):则变成了非贪婪模式
‘python*’:表示匹配*前面的字符串0次或者无限多次
‘python+’:表示匹配+前面的字符串1次或者无限多次
‘python?’:表示匹配?前面的字符串0次或者1次
边界匹配:
import re
qq = '1000000001'
r = re.findall('^\d{4,8}$',qq)
print(r)
import re
language = 'PythonC#JavaPHP'
r = re.findall('C#',language,re.I) #可以忽略大小写
print(r)
‘.’:匹配出换行符\n之外其它所有字符
函数的参数列表,也可以传入另外一个函数。
re.match():从首字母开始匹配。
re.search():搜索整个字符串。
match()和search()都只会匹配一次,找到了就马上返回结果,r.findall()则会返回所有的匹配结果(推荐findall())。
使用r1.group()的方法来返回结果。
print(r.span()):将返回正则表达式的匹配结果在原表达式的位置。
r.group(0):永远返回的是一个完整的匹配结果。
import re
a = 'c|c++|Java\C#|'
r = re.findall('Python',a)
print(r)
#规则
if len(r) > 0:
print('字符串中包含PHP')
else:
print('No')
import re
a = 'python 1111java678php'
r = re.findall('[a-z]{3,6}',a)
print(r)
import re
qq = '1000000001'
r = re.findall('^\d{4,8}$',qq)
print(r)
#组的关系
import re
a = 'PythonPythonPython'
r = re.findall('(Python){3}',a)
print(r)
import re
language = 'PythonC#JavaPHP'
r = re.findall('C#',language,re.I)
print(r)
import re
language = 'PythonC#JavaPHP'
r = re.sub('C#','GO',language)
print(r)
language = language.replace('C#','GO')
import re
s = 'A8BC3721D86'
def convert(value):
matched = value.group()
if (int)matched >= 6:
return '9'
else:
return '0'
r = re.sub('\d',convert,s)
print(r)
#组:
import re
s = 'life is short,i use Python'
r = re.search('life(.*)Python',s)
print(r.group(1))