正则表达式的使用方法主要有4种: re.search(进行正则匹配), re.match(从头开始匹配)  re.findall(找出所有符合条件的字符列表)  re.split(根据条件进行切分)  re.sub(根据条件进行替换)

匹配规则里的符号

# . 可以被当作任意字符, re.M 忽略开头的换行符

res = re.match('^c.+\d', 'cheng123ronghua', flags=re.M)
print(res)

# ^ 匹配当前字符串的开头, ^c表示已c开头,a$以a为结尾

res = re.search('^c[a-z]+a$', 'cdasda')
print(res.group())

# $ 表示结尾

res = re.search('r[a-zA-Z]+a$', 'cheng321ronGHua123aronghua')
print(res.group())

# * 表示匹配0个或者多个

print(re.findall('ab*', 'alexabbtomab'))

# ['a', 'abb', 'ab']

# + 表示匹配一个或者多个

print(re.findall('x\d+a', 'alex123abc'))

# ['x123a']

# ? 匹配0个或者一个

print(re.findall('宋惠乔?', '宋惠 宋惠乔'))

# ['宋惠', '宋惠乔']

# {1,3} 匹配一个到三个之间

print(re.findall('[0-9]{1,3}', 'alex123alex1alex12'))

# ['123', '1', '12']

# | 进行或操作的匹配,匹配其中一个即可

print(re.search('abc|ABC', 'abcABCCD').group())

# abc

# 将需要匹配的字母进行统一的保存

string = re.search('(abc){2}(\|\|=){2}', '123abcabc||=||=')
print(string.group()) # abcabc||=||=

# \A 表示以什么开头, 相当于上面的^

print(re.search('\Aa.+b\Z', 'a123b').group())

# a123b

# \Z 表示以什么结尾,相当于上面的$

print(re.search('b.+d\Z', '11b23d').group())

# b23d

# \D 匹配非数字

print(re.search('\D+', '123$-a').group())

# $-a

# \w 匹配数字或者字母

print(re.search('\w+o\w+', 'the old tsoms').group())

# tsoms

# \W 匹配非数字或者字母

print(re.search('\W+', 'abc123%-%-%abc').group())

# %-%-%

# \s 匹配空包字符 \n\r\t

print(re.findall('\s+', 'sd \r\n sd'))

# [' \r\n ']

# (?P<>[]+) 进行分组构造字典

A = re.search('(?P<id>[0-9]+)(?P<name>[a-z]+)', '123alex')
print(A.groupdict()) # {'id': '123', 'name': 'alex'}

# re.split() 进行数据切分

print(re.split('[ ]+', '123  123 12'))

# ['123', '123', '12']

# re.sub 表示将数字进行替换|

print(re.sub('[0-9]+', '|', 'acv1dae2dasd3ads'))

# acv|dae|dasd|ads

# 进行反斜杠匹配 r'\\'

print(re.split(r'\\', r'abc\123'))

# ['abc', '123']

# re.I 忽略大小写

print(re.search('[a-z]+', 'abcA', re.I).group())

# abcA

# re.M 忽略开头的\n

print(re.search('^d123', '\nd123456', flags=re.M).group())

# d123

# re.S 匹配所有的字符串,包括换行符

print(re.findall(r'd.+s', 'd123\n\rs123', flags=re.S))

# ['d123\n\rs']

这里编写了一个简单的计算器

import re

s = '1-2*((60-30 +(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40 / 5))-(-4*3)/(16-3*2))'
s = s.replace(' ', '')
print(eval(s))
def get_grap(string): x = re.compile('\([^()]+\)').search(string)
if x == None:
return string
else:
return x.group() def cal(x):
if '*' in x:
return float(x.split('*')[0]) * float(x.split('*')[1])
else:
return float(x.split('/')[0]) / float(x.split('/')[1]) def cal_sum(x):
if '+' in x :
return float(x.split('+')[0]) + float(x.split('+')[1])
elif '-' in x:
return float(x.split('-')[0]) - float(x.split('-')[1]) def cal_grap(x):
# 找出其中的乘和除
while True:
y = re.compile('\d+(\.\d+)?[*/]-?\d+(\.\d+)?').search(x)
if y == None:
break
y = y.group()
x = x.replace(y, str(cal(y)))
#找出其中的加减操作
while True:
if re.search('[+][-]', x) != None:
x = re.sub('[+][-]', '-', x)
elif re.search('[-][-]', x) != None:
x = re.sub('[-][-]', '+', x) y = re.compile('-?\d+(\.\d+)?[+\-]\d+(\.\d+)?').search(x)
if y == None:
break
y = y.group()
x = x.replace(y, str(cal_sum(y))) return x while True:
if re.compile('\d+(\.\d+)?').search(s) != None:
if re.compile('\d+(\.\d+)?').search(s).group() == s:
break x = get_grap(s)
if re.search('\(.+\)', x) != None:
all = cal_grap(x)[1:-1]
else:
all = cal_grap(x)
s = s.replace(x, all) print(s)

python正则表达式解析(re)的更多相关文章

  1. Python 正则表达式解析HTML

  2. 比较详细Python正则表达式操作指南(re使用)

    比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...

  3. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  4. python高效解析日志入库

    python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如 ...

  5. Python网页解析

    续上篇文章,网页抓取到手之后就是解析网页了. 在Python中解析网页的库不少,我最开始使用的是BeautifulSoup,貌似这个也是Python中最知名的HTML解析库.它主要的特点就是容错性很好 ...

  6. Python天天美味(15) - Python正则表达式操作指南(re使用)(转)

    http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...

  7. 【repost】Python正则表达式

    星光海豚   python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技 ...

  8. python 正则表达式中反斜杠(\)的麻烦和陷阱

    这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题. (1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符     ...

  9. python正则表达式一[转]

    原文:http://blog.jobbole.com/74844/ 作为一个概念而言,正则表达式对于Python来说并不是独有的.但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别. ...

随机推荐

  1. Oracle笔记(七) 数据更新、事务处理、数据伪列

    一.数据的更新操作 DML操作语法之中,除了查询之外还有数据的库的更新操作,数据的更新操作主要指的是:增加.修改.删除数据,但是考虑到emp表以后还要继续使用,所以下面先将emp表复制一份,输入如下指 ...

  2. MySQL之concat、concat_ws、group_concat

    concat(str1, str2, ...)  返回结果为连接一起的字符串. concat_ws(separator, str1, str2, ...) 同concat,但是可以指定连接符,sepa ...

  3. Hadoop_10_HDFS 的 DataNode工作机制

    1.DataNode的工作机制: 1.DataNode工作职责:存储管理用户的文件块数据  定期向namenode汇报自身所持有的block信息(通过心跳信息上报) (这点很重要,因为,当集群中发生某 ...

  4. Hive的视图和索引(九)

    Hive的视图和索引 1.Hive Lateral View 1.基本介绍 ​ Lateral View用于和UDTF函数(explode.split)结合来使用. ​ 首先通过UDTF函数拆分成多行 ...

  5. python中_、__、__xx__(单下划线、双下划线等)的含义

    (1)_xxx "单下划线 " 开始的成员变量相当于私有变量,也叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问(可以定义有点像java中的ge ...

  6. Ubuntu18.04系统执行语句时出现错误Failed to load module "canberra-gtk-module"

    Ubuntu18.04系统执行gnuradio-companion时,命令行提示错误Failed to load module "canberra-gtk-module",虽然看起 ...

  7. Python:多线程threading模块

    目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...

  8. Angular与Vue

    最近在考虑对前端js框架的选择 根据前人的总结,就总结一下 Angular与Vue 的特点与区别 速度/性能 虽然 Angular 和 Vue 都提供了很高的性能,但由于 Vue 的虚拟 DOM 实现 ...

  9. Linux/Centos查看进程占用内存大小的几种方法总结

    1.命令行输入top回车,然后按下大写M按照memory排序,按下大写P按照CPU排序. 2. ps -ef | grep "进程名"     ps -e -o 'pid,comm ...

  10. return new Promise的时候,不能带着.then()方法

    app.js return new Promise的同时带着.then()方法会出错 return出去的这个Promise,整体状态会显示pending,虽然详细里状态显示resolve,但是没有re ...