一.正则表达式:是一个特殊的字符序列,可以帮我们检测一个字符串是否与我们所设定的这样的字符序列,相匹配。如果匹配,我们可以实现快速检索文本,或实现一些替换文本的操作。如:检查一串数字是否是电话号码,把一个文本里指定的单词替换为另外一个单词 。
1.检测一个字符串1是否包含在另一个字符串2里(可以用python内置的 in或字符串2.index(字符串1))在这里使用最基础的正则表达式。
import re #引入python提供的re模块,里面有很多方法供我们操作正则表达式
a="c|c++|java|c#|R|Python"
r=re.findall("Python",a) #在字符串a里找字符串Python 用r接收结果
if len(r) > 0:
print("字符串中包含Python")
else:
print("NO")
用Python常量不适合,灵魂在于:规则
import re #引入python提供的re模块,里面有很多方法供我们操作正则表达式
a="c0c++7java8c#9R6Python"
# re.findall("正则表达式",a) #在字符串a里找所有满足正则表达式的
r=re.findall("\d",a) #正则表达式提供\d表示数字0~9
print(r)
# 正则表达式的基本元素:"Python" 普通字符 "\d"元字符,百度正则表达式有规定的元字符
#只能匹配单一的字符
字符集
#字符集
import re
s="abc,acc,adc,aec,afc,ahc"
r=re.findall("a[cf]c",s) #字符集:["字符字符.."] #找出s里单词中间的字母是c或者f的单词
print(r)
#字符集的特性:出现在[]里的字符之间是“或”关系 ,[^字符1字符2..]不是字符1也不是字符2也不是..
v=re.findall("a[^cf]c",s) #找出s里单词中间的字母不是c也不是f的单词
print(v)
#如果匹配的字符太多,可以使用字符的顺序
o=re.findall("a[c-f]c",s) #找出s里单词中间的字母是c到f其中之一字母的单词
print(o)
#概括字符集
# \d:所有数字0-9也即[0-9],\D:所有非数字[^0-9]
# \w:所有数字和字母 单词字符[A-Za-z0-9_] \W所有的非单词字符
# \s:所有的空白字符,如空格、\r等等 \S:所有的非空白字符
# . :除了换行字符\n以外的所有字符
import re
a="python1111 java&678\rphp"
r=re.findall("\S",a)
print(r)
#数量词
import re
a="python 1111java&678php"
b="pytho0python1pythonn2"
#r=re.findall("[a-z][a-z][a-z]",a)和r=re.findall("[a-z]{3}",a) 一样
r=re.findall("[a-z]{3,6}",a) #可以让前边的[]重复{}次 即让[a-z]重复3到6次
#贪婪与非贪婪 python默认倾向于贪婪匹配更多 若想非贪婪需要"[a-z]{3,6}?"在后边加?号
print(r)
# *:匹配*号前边的字符0次或者无限多次 如"python*"
v=re.findall("python*",b)
print(v)
# +:匹配1次或者无限多次 如"python+"
m=re.findall("python+",b)
print(v)
# ?:匹配0次或者1次 如"python?"
n=re.findall("python?",b)
print(n)
#边界匹配
import re
qq="100000001"
#要求qq是四至八位
r=re.fiandall("^\d{4,8}$",qq)
#前边加^表示从前开始,后边加$表示从后截止。^\d{4,8}$表示头到尾符合数字0-9且是4-8位的
print(r)
#组 () 可以有多个组
import re
a="pythonpythonpythonpythonpython"
r=re.findall("(python){3}",a) #[]或关系 ()且关系
print(r)
#re.findall 第三个参数:匹配模式
import re
lanuage="pythonC#\njavaR"
r=re.findall("c#",lanuage,re.I) #加上第三个参数re.I表示匹配不区分大小写
print(r)
v=re.findall("c#.{1}",lanuage,re.I | re.S) #匹配模式多个时用|连接
print(v) #re.S表示匹配时.匹配所有
#re模块中的其他函数 re.sub正则替换
import re
lanuage="javaC#RC#Python"
# re.sub(1,2,3,4,5) 替换 1正则表达式,替换成2,3是要查找的字符串,4被替换的次数,5匹配模式
r=re.sub("C#","go",lanuage)
print(r)
#把函数当做参数传递
s="a12df897ff1"
def convert(value):
matched=value.group() #group()读取返回结果
if int(matched)>=6:
return "9"
else:
return "0"
v=re.sub("\d",convert,s)
print(v)
#re.match 从第一个字符开始匹配,只会匹配一次
#re.search 找到一个匹配的就返回结果