码迷,mamicode.com
首页 > 编程语言 > 详细

python正则表达式解析(re)

时间:2019-09-06 16:14:20      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:color   多个   lag   数据   name   print   int   正则匹配   while   

正则表达式的使用方法主要有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\\, rabc\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(rd.+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)

标签:color   多个   lag   数据   name   print   int   正则匹配   while   

原文地址:https://www.cnblogs.com/my-love-is-python/p/11475109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!