Loading

python.正则表达式

简介

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

匹配规则

字符 注释 检索字符串 表达式 成功匹配对象
. 匹配除换行符(\n)以外的任意字符 123456 ... 123
^ 匹配字符串的开始,多行内容时匹配每一行的开始 123456 ^123 & ^23 123 & None
$ 匹配字符串的结尾,多行内容时匹配每一行的结尾 123456 456$ & 56$ 456 & None
* 出现0次或无限次,也就是第0个字符 123456 4* “ ”
? 出现0次或1次,也是第0个字符 123456 4? “ ”
+ 前一个字符至少出现1次 123456 4+ 4
\d 匹配数字:0~9 12345@ \d 1
\D 匹配非数字字符 12345@ \D @
\s 匹配空格字符(\t,\n,\r,\f,\v) 1 6 \s\s\s " "
\S 匹配非空格字符(\t,\n,\r,\f,\v) 1 6 \S 1
\w 匹配任意字母\数字\下划线 1z_@ \w\w\w 1z_
\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
[] 字符集,对应位置上可以是字符集里的任意字符 14201974 20[251]9 2019

示例:

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,,,']
posted @ 2019-07-23 15:39  yonugleesin  阅读(353)  评论(0编辑  收藏  举报