导航:首页 > 编程语言 > python正则匹配变量

python正则匹配变量

发布时间:2024-11-08 00:49:12

1. python 基础教程 第10章,正则表达式匹配问题

importre

a=re.compile(r'[(.+?)]')
scope={}


defreplace(ddd):
code=ddd.group(1)
try:
returnstr(eval(code,scope))
exceptSyntaxError:
exec(code,scope)
returncode


print(a.sub(replace,'[x=1],[y=2],[z=2],thesumof[x],[z]and[y]is[x+y+z]'))

scope是在全局变量里保存正则匹配出来的x,y,z变量,存到全局变量里去;

这本书的案例在except SyntaxError:后面少了点代码,只提供注释,前面其实已经提到用exec赋值了,只是代码里没有体现出来,我完善了下这个应该能看懂了,还有[],正则已经把[]替换掉了,换成x,y,z对应的值

2. 强烈推荐!Python 这个宝藏库 re 正则匹配


Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作。

在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具 ,下面总结了 re 模块的常用方法。


d 匹配所有的十进制数字 0-9

D 匹配所有的非数字,包含下划线

s 匹配所有空白字符(空格、TAB等)

S 匹配所有非空白字符,包含下划线

w 匹配所有字母、汉字、数字 a-z A-Z 0-9

W 匹配所有非字母、汉字、数字,包含下划线


备注:符号.* 贪婪,符号.*? 非贪婪

[abc]:能匹配其中的单个字符

[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)

[2-9] [1-3]:能够做组合匹配

4.{ }:用于标记前面的字符出现的频率,有如下情况:

{n,m}:代表前面字符最少出现n次,最多出现m次

{n,}:代表前面字符最少出现n次,最多不受限制

{,m}:代表前面字符最多出现n次,最少不受限制

{n}:前面的字符必须出现n次


字符串中有反斜杠的,需要对反斜杠做转义


():分组字符,可以为匹配到的内容分组,快速获取到分组中的数据 在正则里面 "()" 代表的是分组的意思,一个括号代表一个分组,你只能匹配到 "()" 中的内容。

group:用于查看指定分组匹配到的内容

groups:返回一个元组,组内为所有匹配到的内容

groupdict:返回一个字典,包含分组的键值对,需要为分组命名


作用:可以将字符串匹配正则表达式的部分割开并返回一个列表


flags定义包括:

re.I:忽略大小写

re.L:表示特殊字符集 w, W, b, B, s, S 依赖于当前环境

re.M:多行模式

re.S:’.’并且包括换行符在内的任意字符(注意:’.’不包括换行符)

re.U:表示特殊字符集 w, W, b, B, d, D, s, S 依赖于 Unicode 字符属性数据库

在 Python 中使用正则表达式之前,先使用以下命令导入 re 模块


例如:

‘(d)(a)1’ 表示:匹配第一是数字,第二是字符a,第三 1 必须匹配第一个一样的数字重复一次,也就是被引用一次。

如 “9a9” 被匹配,但 “9a8” 不会被匹配,因为第三位的 1 必须是 9 才可以。

‘(d)(a)2’ 表示:匹配第一个是一个数字,第二个是a,第三个 2 必须是第二组()中匹配一样的。

如 “8aa” 被匹配,但 “8ab”,“7a7” 不会被匹配,第三位必须是第二组字符的复制版,也是就引用第二组正则的匹配内容。





3. Python正则表达式的几种匹配用法

下面列出: 1.测试正则表达式是否匹配字符串的全部或部分regex=ur"" #正则表达式
if re.search(regex, subject): do_something()else: do_anotherthing() 2.测试正则表达式是否匹配整个字符串 regex=ur"/Z" #正则表达式末尾以/Z结束
if re.match(regex, subject): do_something()else: do_anotherthing() 3.创建一个匹配对象,然后通过该对象获得匹配细节(Create an object with details about how the regex matches (part of) a string) regex=ur"" #正则表达式
match = re.search(regex, subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 4.获取正则表达式所匹配的子串(Get the part of a string matched by the regex) regex=ur"" #正则表达式
match = re.search(regex, subject)if match: result = match.group()else: result ="" 5. 获取捕获组所匹配的子串(Get the part of a string matched by a capturing group) regex=ur"" #正则表达式
match = re.search(regex, subject)if match: result = match.group(1)else: result ="" 6. 获取有名组所匹配的子串(Get the part of a string matched by a named group) regex=ur"" #正则表达式
match = re.search(regex, subject)if match:result = match.group"groupname")else:result = "" 7. 将字符串中所有匹配的子串放入数组中(Get an array of all regex matches in a string) result = re.findall(regex, subject) 8.遍历所有匹配的子串(Iterate over all matches in a string) for match in re.finditer(r"<(.*?)/s*.*?//1>", subject) # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() 9.通过正则表达式字符串创建一个正则表达式对象(Create an object to use the same regex for many operations) reobj = re.compile(regex) 10.用法1的正则表达式对象版本(use regex object for if/else branch whether (part of) a string can be matched) reobj = re.compile(regex)if reobj.search(subject): do_something()else: do_anotherthing() 11.用法2的正则表达式对象版本(use regex object for if/else branch whether a string can be matched entirely) reobj = re.compile(r"/Z") #正则表达式末尾以/Z 结束
if reobj.match(subject): do_something()else: do_anotherthing() 12.创建一个正则表达式对象,然后通过该对象获得匹配细节(Create an object with details about how the regex object matches (part of) a string) reobj = re.compile(regex) match = reobj.search(subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 13.用正则表达式对象获取匹配子串(Use regex object to get the part of a string matched by the regex) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group()else: result ="" 14.用正则表达式对象获取捕获组所匹配的子串(Use regex object to get the part of a string matched by a capturing group) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group(1)else: result ="" 15.用正则表达式对象获取有名组所匹配的子串(Use regex object to get the part of a string matched by a named group) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group("groupname")else: result ="" 16.用正则表达式对象获取所有匹配子串并放入数组(Use regex object to get an array of all regex matches in a string) reobj = re.compile(regex) result = reobj.findall(subject) 17.通过正则表达式对象遍历所有匹配子串(Use regex object to iterate over all matches in a string) reobj = re.compile(regex)for match in reobj.finditer(subject): # match start: match.start() # match end (exclusive): match.end() # matched text: match.group()字符串替换 1.替换所有匹配的子串 #用newstring替换subject中所有与正则表达式regex匹配的子串
result = re.sub(regex, newstring, subject) 2.替换所有匹配的子串(使用正则表达式对象) reobj = re.compile(regex) result = reobj.sub(newstring, subject) 字符串拆分 1.字符串拆分 result = re.split(regex, subject) 2.字符串拆分(使用正则表示式对象) reobj = re.compile(regex) result = reobj.split(subject)

4. Python用正则表达式匹配含有中文的字符串,匹配不到

代码如下:

#coding=utf-8

importre
s=u'<li><aclass="nav-first"href="/">首页</a></li>'
r=re.compile(u'<li><asclass="[^"]*"shref="[^"]">(.*?)(?=</a></li>)')
ss=r.findall(s)
forstrinss:
printstr

运行结果:

5. python 正则表达式,怎么从字符串中匹配成组的所有结果

匹配所有结果的python程租迅序如下(注意图中源前塌代码的缩进)

import re

a="lege.teeth34eatedecdeath#e0t~"

regex='(.)e(.)t(.)'弊悔此

result=[]

for i in range(len(a)-4):

b=a[i:i+5]

obj=re.match(regex,b)

if obj:

result.append((obj.group(1),obj.group(2),obj.group(3)))

print(result)

阅读全文

与python正则匹配变量相关的资料

热点内容
传奇资源网站源码 浏览:372
f26app怎么下载 浏览:118
程序员与酒 浏览:435
php政府网站源码 浏览:910
前端面试常问算法 浏览:151
pythonopen可以打开文件夹吗 浏览:633
不锈钢加密网带厂家 浏览:345
哪一年除夕不算法定节假日 浏览:40
程序员对键盘的需求 浏览:603
程序员的峥嵘岁月 浏览:56
python调用类里面的函数 浏览:473
pre加密头发医院 浏览:547
优先级高服务算法 浏览:840
抖音最火解压游戏名字 浏览:952
java打jar包命令 浏览:174
阿里云服务器可以当挂机宝用吗 浏览:200
oppo微信加密图案如何取消 浏览:146
上海开车上班20公里源码 浏览:312
cab自解压注册 浏览:927
懂车帝app在哪里看配置对比 浏览:826