正则表达式

正则表达式

定义:正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配。快速检索文本、实现一些替换文本的操作。
1、检查一串数字是否是电话号码;
2、检测一个字符串是否符合email;
3、把一个文本里指定的单词替换为另外一个单词

一、查找 findall

import re
a = 'c|c++|java|python'
## print(a.index(‘python’)> -1 )
## print('python' in a)
re.findall('python',a)	# re.findall('正则表达式',a)

if len(r) > 0:
	print("字符串中包含python")

b = 'c7c++7java7python'
rr = re.findall('\d',a)
print(rr)

具体字符集负责确定开始和结尾,抽象字符集用来匹配。
## 概括字符集:
\w 匹配所有的单词字符(字符和数字[A-Za-z0-9和_])
\W 匹配非单词字符
\d 匹配所有的数字
\D 匹配所有的字符
. 匹配除换行符以外其它所有的字符
## 数量词
c = 'python 1111java678php'
rrr = re.findall('[a-z]{3}',a)	#{3}相当于前面字符集乘以数量集
print(rrr) 	#['pyt','hon','jav','php']

rrr = re.findall('[a-z]{3,6}',a)	#{3}相当于前面字符集乘以数量集3到6之间的数字
print(rrr) 	#['python','java','php']
#python倾向于贪婪匹配,当有3到6这个选择时,python会尽量选择大的6来匹配
# 如果python想要启动非贪婪的模式匹配,在数量词后面加上?
rrrr = re.findall('[a-z]{3,6}?’,a)
print(rrrr)	#['pyt','hon','jav','php']

# * 表示对它前面的那个字符匹配0次或者无线多次
# + 表示匹配1次或者无线多次
# ? 表示匹配0次或者1次   可以拿来去重
#如果前面有个范围,再加?表示的是非贪婪的意思;如果前面是固定字符表示的是数量词的意思

d =  re.findall("python{1,2}?",a)
print(d) # [python,python]

## 边界匹配
qq = '10000001'
r = re.findall('^\d{4,8}$',qq) 
# ^表示从字符串的开头进行匹配,$表示从字符串的结尾匹配 

## 多个字符的重复,用组的概念,一个括号就是一个组
# []里的数字是或的关系,()里的数字表示的是且的关系
r = re.findall('(python){3}',a)

## findall的第三个参数表示模式
language = 'PythonC#\nJavaPHP'
r = re.findall('c#.{1}',language,re.I | re.I)
re.I表示忽略大小写,第三个参数也可以填入多个模式
re.S 改变.号的行为,使.号能匹配所有换行符
re.I | re.I 表示两种模式都支持

6

二、替换 replace

import re
language = 'PythonC#\nJavaC#PHPC#'
r = re.sub('C#','GO',language,0 )	#0表示无限制匹配下去,1表示只匹配第一个
def convert(value):
	matched = value.group()
	return '!!' + matched + '!!'
rr = re.sub('C#', convert, language)
language =  language.replace('C#','GO')	#字符串的替换
print(language)
print(r)


## 示例一
import re
s = 'A8C3621D89'
def convert(value):
	matched = valued.group()
	if int(matched) >= 6:
		return '9'	#不能直接传数字
	else:
		return0’
r = re.sub('\d', convert,s)


三、re.match和re.search函数(可以不看,findall都可以满足要求)

match和search都只匹配一次

import re
s = 'A83C72D1D8E67'
r = re.match('\d',s) #从字符串的首字母开始匹配,None
print(r)
r1 = re.search('\d',s)	#搜索整个字符串,直到他找到第一个满足字符串的结果
print(rq)

## 获取字符中间的内容
### 实现方法一 
import re
s = 'life is short ,i use python'
r = re.search('life(.*)python', s)
# print(r.group(0))	# group(0)表达的是完整的结果,
print(r.group(1)) 	#输出结果 is short ,i use,返回的是元祖

### 实现方法二,findall 的实现
r = re.findall('life(.*)python' , s)
print(r.group(1)) #输出:['is short,i use'],返回的是列表

注意:空格不在单词字符里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值