Python教程

python:正则表达式

本文主要是介绍python:正则表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

针对字符串提炼出需要的部分;

正则表达式(或RE)是一种小型的,高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现。正则表达式模式被译为一系列的字节码,然后由用C编写的匹配引擎执行;

一、元字符

使用说明案例说明
.除换行符以外的任意一个符号;re.s模式也可以使.匹配包括换行在内的所有字符
^匹配字符串的开头;在字符集[]中使用表示取反的意思
$匹配字符串的结尾
*匹配0个或多个表达式,默认贪婪模式
ret = re.findall('hello a*','hello aaaab')
print(ret)
匹配‘hello a’,a可以0个或多个;贪婪模式取最长的a;
结果为:
+匹配1个或多个表达式。默认贪婪模式
匹配0个或1个由前面的正则表达式,默认非贪婪模式
ret = re.findall('hello a?','hello aaaaab')
print(ret)
匹配0个或1个,大于1个时,结果输出1个;
结果为['hello a']
{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪模式;当花括号中只有一个值{n}时,表示匹配n次
[]字符集,多个字符选其一,[^...]取反;[1-9]表示匹配从1到9的范围
|匹配做正则表达式或右边正则表达式
()匹配括号内的表达式,也表示一个组;仅输出括号中的字符
\转义符

使用案例 

ret = re.findall('hello .{5}', 'hello python,hello world,hello re,hello sxm')
print(ret)

# ['hello pytho', 'hello world', 'hello re,he']

ret = re.findall('hello .{2,5}', 'hello python,hello world,hello re')
print(ret)

# ['hello pytho', 'hello world', 'hello re']

ret = re.findall('hello .{5},', 'hello python,hello world,hello re')
print(ret)

# ['hello world,']

ret = re.findall('hello .*,', 'hello python,hello world,hello re,hello sxms')
print(ret)

# ['hello python,hello world,hello re,']

ret = re.findall('hello .*?,', 'hello python,hello world,hello re,hello sxms')
print(ret)

# 使用最广,?在此处表示去除*的贪婪匹配;结果为['hello python,', 'hello world,', 'hello re,']


ret = re.findall('hello (.*?),', 'hello python,hello world,hello re,hello sxms')
print(ret)

# 结果为['python', 'world', 're']



ret = re.findall('[1-9]', 'ab1si3d89j0')
print(ret)

# ['1', '3', '8', '9']

ret = re.findall('[1-9]+', 'ab1si3d89j0')
print(ret)

#匹配连续的字符集,结果为['1', '3', '89']

#取以com或cn结尾的域名;?:在此处表示取消()的优先提炼权;结果为['www.baidu.com', 'www.jd.cn']
ret = re.findall('www\.[a-zA-Z]+\.(?:com|cn)', 'www.baidu.com,www.python.org,www.jd.cn')
print(ret)


 

使用说明
\d匹配任何十进制数,相当于[0-9]
\D匹配任何非数字字符,相当于[^0-9]
\s匹配任何空白字符,相当于[ \t\n\r\f\v]
\S匹配任何非空白字符,相当于[^ \t\n\r\f\v]
\w匹配任何字母数字字符,相当于[a-zA-Z0-9]
\W匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
\b匹配一个特殊字符边界,比如空格 ,&,#等

二、正则方法

使用说明
re.search(re,str)只能匹配第一个符合匹配规则的对象
re.match(re,str)以re匹配规则匹配字符串为开头的内容,相当于在re.search()的基础上增加了^的功能
re.compile(re)编译匹配规则
re.split()
re.sub()正则替换
import re

ret = re.search('\d+', 'abc12dje')
print(ret)  #匹配后的第一项的对象
print(ret.group())  #匹配后的第一项的字符串

# ?P<name>为给组起名,组名为name
ret = re.search('www\.(?P<name>[a-zA-Z]+)\.(com|cn)', 'www.baidu.com,www.python.org,www.jd.cn')
print(ret)
print(ret.group())
print(ret.group(1))  #取()组的组引号为1的字符串
print(ret.group(2))
print(ret.group('name'))  #取组名为name的字符串

ret = re.match('\d+', '67dke12i=24nk')
print(ret)
print(ret.group())

comp = re.compile('\d+')
ret = comp.search('224425fv')
print(ret.group())

# split分割
ret = re.split('\d+', 'alvin34zhangsan45lisi12')
print(ret)
#结果为:['alvin', 'zhangsan', 'lisi', '']

#sub替换
ret = re.sub(' .*?,', ' sxm,', 'hello python,hello world,hello re,')
print(ret)

ret = re.sub('(hello )(.*?)(,)', '\\1sxm\\3,', 'hello python,hello world,hello re, JS,')
print(ret)

这篇关于python:正则表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!