python.正则表达式

mac2022-06-30  90

简介

正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在,而非python独有。

匹配规则

字符注释检索字符串表达式成功匹配对象.匹配除换行符(\n)以外的任意字符123456...123^匹配字符串的开始,多行内容时匹配每一行的开始123456^123 & ^23123 & None$匹配字符串的结尾,多行内容时匹配每一行的结尾123456456$ & 56$456 & None*出现0次或无限次,也就是第0个字符1234564*“ ”?出现0次或1次,也是第0个字符1234564?“ ”+前一个字符至少出现1次1234564+4\d匹配数字:0~912345@\d1\D匹配非数字字符12345@\D@\s匹配空格字符(\t,\n,\r,\f,\v)1 6\s\s\s" "\S匹配非空格字符(\t,\n,\r,\f,\v)1 6\S1\w匹配任意字母\数字\下划线1z_@\w\w\w1z_\W匹配非单词字符1z_@\W@[0-9]指定一个范围数字集12abCD蔡[0-9][0-9]12[a-z]指定一个范围小写字母集12abCD蔡[a-z][a-z]ab[A-Z]指定一个范围大写字母集12abCD蔡[A-Z][A-Z]CD[\u4e00-\u9fa5]指定一个范围汉字集12abCD蔡[\u4e00-\u9fa5]蔡{n}{n}前面的原子出现了n次123456\d{5}{n,}{n}前面的原子出现了无限次123456\d{5,}123456{n,m}{n}前面的原子出现了n-m次123456\d{2,4}1234[]字符集,对应位置上可以是字符集里的任意字符1420197420[251]92019

示例:

import re # 导入正则模块 tel = "0755-12345678" #实例化一个检索对象 pat = r"2[0567][1789]\d{5}|\d{4}-\d{8}" #实例化表达式 print(re.findall(pat, tel)) # 在检索对象中按照表达式进行检索并打印 >>> ['0755-12345678'] # 返回值

re模块

此模块主要方法如下

re.match() #尝试从字符串的起始位置匹配一个模式(pattern),如果不是起始位置匹配成功的话,match()就返回None re.search() #函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。 re.findall() #遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。 re.compile() #编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。) re.sub() #使用re替换string中每一个匹配的子串后返回替换后的字符串。 re.subn() #返回替换次数 re.split() #按照能够匹配的子串将string分割后返回列表。

match()

re.match(pattern, string, flags=0) pattern:正则表达式(或者正则表达式对象) string:要匹配的字符串 flags:修饰符 尝试从字符串的起始位置匹配一个模式(pattern) 如果不是起始位置匹配成功的话 match()就返回None

import re strr = "javapythonhtml" result = re.match('.*python',strr) print(result) print(result.group()) # .group()表示的是返回正则匹配的结果 print(result.span()) # .span()表示返回正则匹配的范围 >>> <re.Match object; span=(0, 10), match='javapython'> >>> javapython >>> (0, 10)

re.search(pattern, string, flags=0) pattern:正则表达式(或者正则表达式对象) string:要匹配的字符串 flags:修饰符 re.match()和re.search()用法类似唯一的区别在于re.match()从字符串头开始匹配,若头匹配不成功,则返回None

import re strr = "javapythonhtml" result = re.match('python',strr) print(result) print(result.group()) # print(result.span()) >>> <re.Match object; span=(4, 10), match='python'> >>> python >>> (4, 10)

finall()

re.finditer(pattern, string, flags=0) pattern:正则表达式(或者正则表达式对象 string:要匹配的字符串 flags:修饰符  返回一个顺序访问每一个匹配结果(Match对象)的迭代器 找到 RE 匹配的所有子串 返回数组

import re strr ="-------python---------------python-----------------\ ------python-------------------python------------------" result = re.findall(r'python', strr) print(result) >>> ['python', 'python', 'python', 'python']

finditer()

re.finditer(pattern, string, flag) pattern:正则表达式(或者正则表达式对象 string:要匹配的字符串 flags:修饰符 返回一个顺序访问每一个匹配结果(Match对象)的迭代器 找到 RE 匹配的所有子串 返回形式为迭代器

import re strr ="-------python---------------python-----------------\ ------python-------------------python------------------" data = re.finditer(r"python",strr) list1 = [] for i in data: list1.append(i.group()) print(list1) >>> ['python', 'python', 'python', 'python']

compile()

re.compile(pattern,flags=0) pattern:正则表达式(或者正则表达式对象) flags:修饰符  编译正则表达式模式 返回一个对象的模式

import re strr ="-------python---------------python-----------------\ ------python-------------------python------------------" result = re.compile(r"python") print(result.findall(strr)) >>> ['python', 'python', 'python', 'python']

sub()

re.sub(pattern, repl, string, count=0, flags=0) pattern:正则表达式(或者正则表达式对象) repl:替换的字符串 string:要匹配的字符串 count:要替换的个数 flags:修饰符  用于替换字符

import re strr = "hello 111,hello 222" result = re.sub(r"\d+", "666", strr) print(result) >>> hello 666,hello 666

split()

re.split(pattern, string,[maxsplit]) 正则表达式(或者正则表达式对象)string:要匹配的字符串 maxsplit:用于指定最大分割次数 不指定将全部分割 用于分割字符

import re strr = ",leesin,hasaki,zed,,javen,,," pat = re.compile(r",+") result = re.split(r",+",strr,3) print(result >>> ['', 'leesin', 'hasaki', 'zed,,javen,,,']

转载于:https://www.cnblogs.com/youngleesin/p/11230394.html

相关资源:python 用正则表达式筛选文本信息的实例
最新回复(0)