import re
from re import findall,search,sub,S
searet_code = 'hadfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
# .的使用 相当于一个占位符
# a = 'xy123'
# b = re.findall('x..',a)
# print(b)
# *的使用 匹配无限次 如果不是单一的一个字符,则不会出现空的
# a = 'xyxy123'
# b = re.findall('x*',a)
# print(b)
# ?的使用
# a = 'xxxxxxy123'
# b = re.findall('x?',a)
# print(b)
# 上面的了解就可以啦,需要掌握的只有一个 (.*?)
# .*的使用
# c = re.findall('xx.*xx',searet_code)
# print(c)
# .*?的使用
# c = re.findall('xx.*?xx',searet_code)
# print(c)
# (.*?)的使用
# c = re.findall('xx(.*?)xx',searet_code)
# print(c)
# s = '''sdfxxhello
# xxfsdfxxworldxxasdf'''
#
# d = re.findall('xx(.*?)xx',s,re.S) # re.S .表示包括了换行符
# print(d)
# 对比findall与search的区别
# s2 = 'asdxxIxx123xxlovexxdfd'
# f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(1)
# print(f)
#
# f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
# print(f2[0][1])
# sub的使用举例
# s = '123sssss123'
# output = re.sub('123(.*?)123','123%d123'%789,s)
# print(output)
# 演示不同的导入方法 不推荐这样使用from re import findall,search,sub,S
# info = findall('xx(.*?)xx',searet_code,S)
# for each in info:
# print(each)
# 不需使用compile 多此一举(程序自己会编译)
# pattern = 'xx(.*?)xx'
# new_pattern = re.compile(pattern,re.S)
# output = re.findall(new_pattern,searet_code)
# print(output)
# 匹配纯数字
# a = 'asdfasdf1234567fas888dfas'
# b = re.findall('(\d+)',a)
# print(b)
以上是代码实例,和一些正则表达式中的常用技巧
以下是一些基本的描述:
. 匹配任意字符
* 匹配前一个字符0次或者无限次
? 匹配前一个字符0次或1次
.* 贪心算法
.*? 非贪心算法 像一个婴儿一样,少量多餐
() 括号内的数据作为结果返回 需要的内容放在括号里面,不需要的内容放在括号外面
findall 匹配所有符合规律的内容,返回包含结果的列表
search 匹配并提取第一个符合规律的内容,返回一个正则表达式对象
sub 替换符合规律的内容,返回替换后的值
正则表达式一些常用技巧
import
from re import*
from re import findall,search,sub,S
不需要complie
使用\d+匹配纯数字