正则表达式

一.正则表达式:是一个特殊的字符序列,可以帮我们检测一个字符串是否与我们所设定的这样的字符序列,相匹配。如果匹配,我们可以实现快速检索文本,或实现一些替换文本的操作。如:检查一串数字是否是电话号码,把一个文本里指定的单词替换为另外一个单词 。

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 找到一个匹配的就返回结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值