正则表达式:
group():获取匹配到的所有结果
groups():获取模型中匹配到的分组结果
groupdict():后去模型中匹配到的分组结果
match()
search()
findall()
大概可以分为三大类
无分组:
实例:
origin="hello alex bcd alex lge alex acd 19"
r=re.match("h\w+",origin)
print(r.group())
print(r.groups())
print(r.groupdict())
结果:hello
()
{}
有分组:从获取到的字符串中再获取到所需的字符串(同上实例,只改正则表达式)
groups实例:r=re.match("h(\w+)",origin)
结果:hello
('ello',)
{}
groupdict实例:r=re.match("(?P<n1>h)(\w+)",origin) #?P<key>为字典加上key
结果:hello
('h', 'ello')
{'n1': 'h'}
findall()输出的结果(有分组)相当于r.groups(),分组的提取:从左到右,从外到内
finditer()相当于迭代器,可通过for输出
实例:origin="hello alex bcd alex lge alex acd 19w"
r=re.finditer("(a)(\w+)(?P<n1>x)",origin)
print(r)
for i in r:
print(i,i.group(),i.groups(),i.groupdict())
结果:<callable_iterator object at 0x000000871B2C4A90>
<_sre.SRE_Match object; span=(6, 10), match='alex'> alex ('a', 'le', 'x') {'n1': 'x'}
<_sre.SRE_Match object; span=(15, 19), match='alex'> alex ('a', 'le', 'x') {'n1': 'x'}
<_sre.SRE_Match object; span=(24, 28), match='alex'> alex ('a', 'le', 'x') {'n1': 'x'}
sub()替换字符串
----------------------------------------------------------------------------------------------------
注意:在单独匹配*时,会在最后额外的进行匹配空值
实例:r=re.findall(r"(\d+a)*","1a2a")
print(r)
结果:['2a', '']
疑问:
实例:r=re.findall(r"(\d+a)*","1a2ad3a")
print(r)
结果:['2a', '', '3a', '']
------------------------------------------------------------------------------------------------------
split():分割
无分组:
实例:origin="hello alex bcd abcd lge acd 19"
n = re.split("a\w+",origin,1)
print(n)
结果:['hello ', ' bcd abcd lge acd 19']
有分组:
实例(同上,只改正则):n = re.split("(a\w+)",origin,1)
结果:['hello ', 'alex', ' bcd abcd lge acd 19']
计算器的思路:
实例:origin="1-2 * (60-(2*3)-(2+4))"
n = re.split("\(([^()]+)\)",origin) #取最里括号内的数据
print(n)
结果:['1-2 * (60-', '2*3', '-', '2+4', ')']
def f(s):
add = re.compile(r"\d+\.?\d*[+]\d+\.?\d*")
sub = re.compile("\d+[.]?\d*[-]\d+[.]?\d*")
mul = re.compile("\d+[.]?\d*[*]\d+[.]?\d*")
div = re.compile("\d+[.]?\d*[/]\d+[.]?\d*")
while True:
if s.find("*"):
m1=re.split("(\d+[.]?\d*[*]\d+[.]?\d*)",s,1)
m= int(m1[1][0])*int(m1[1][2])
s= m1[0]+str(m)+m1[2]
break
origin = "1-2 * (60-(2*3)-(2+4))"
while True:
print(origin)
result = re.split("\(([^()]+)\)",origin,1)
if len(result) == 3:
before = result[0]
content = result[1]
after = result[2] #等同于 before,content,after = result
r = f1(content)
new_str = before + str(r) +after
origin = new_str
else:
print(origin)
break
group():获取匹配到的所有结果
groups():获取模型中匹配到的分组结果
groupdict():后去模型中匹配到的分组结果
match()
search()
findall()
大概可以分为三大类
无分组:
实例:
origin="hello alex bcd alex lge alex acd 19"
r=re.match("h\w+",origin)
print(r.group())
print(r.groups())
print(r.groupdict())
结果:hello
()
{}
有分组:从获取到的字符串中再获取到所需的字符串(同上实例,只改正则表达式)
groups实例:r=re.match("h(\w+)",origin)
结果:hello
('ello',)
{}
groupdict实例:r=re.match("(?P<n1>h)(\w+)",origin) #?P<key>为字典加上key
结果:hello
('h', 'ello')
{'n1': 'h'}
findall()输出的结果(有分组)相当于r.groups(),分组的提取:从左到右,从外到内
finditer()相当于迭代器,可通过for输出
实例:origin="hello alex bcd alex lge alex acd 19w"
r=re.finditer("(a)(\w+)(?P<n1>x)",origin)
print(r)
for i in r:
print(i,i.group(),i.groups(),i.groupdict())
结果:<callable_iterator object at 0x000000871B2C4A90>
<_sre.SRE_Match object; span=(6, 10), match='alex'> alex ('a', 'le', 'x') {'n1': 'x'}
<_sre.SRE_Match object; span=(15, 19), match='alex'> alex ('a', 'le', 'x') {'n1': 'x'}
<_sre.SRE_Match object; span=(24, 28), match='alex'> alex ('a', 'le', 'x') {'n1': 'x'}
sub()替换字符串
----------------------------------------------------------------------------------------------------
注意:在单独匹配*时,会在最后额外的进行匹配空值
实例:r=re.findall(r"(\d+a)*","1a2a")
print(r)
结果:['2a', '']
疑问:
实例:r=re.findall(r"(\d+a)*","1a2ad3a")
print(r)
结果:['2a', '', '3a', '']
------------------------------------------------------------------------------------------------------
split():分割
无分组:
实例:origin="hello alex bcd abcd lge acd 19"
n = re.split("a\w+",origin,1)
print(n)
结果:['hello ', ' bcd abcd lge acd 19']
有分组:
实例(同上,只改正则):n = re.split("(a\w+)",origin,1)
结果:['hello ', 'alex', ' bcd abcd lge acd 19']
计算器的思路:
实例:origin="1-2 * (60-(2*3)-(2+4))"
n = re.split("\(([^()]+)\)",origin) #取最里括号内的数据
print(n)
结果:['1-2 * (60-', '2*3', '-', '2+4', ')']
def f(s):
add = re.compile(r"\d+\.?\d*[+]\d+\.?\d*")
sub = re.compile("\d+[.]?\d*[-]\d+[.]?\d*")
mul = re.compile("\d+[.]?\d*[*]\d+[.]?\d*")
div = re.compile("\d+[.]?\d*[/]\d+[.]?\d*")
while True:
if s.find("*"):
m1=re.split("(\d+[.]?\d*[*]\d+[.]?\d*)",s,1)
m= int(m1[1][0])*int(m1[1][2])
s= m1[0]+str(m)+m1[2]
break
origin = "1-2 * (60-(2*3)-(2+4))"
while True:
print(origin)
result = re.split("\(([^()]+)\)",origin,1)
if len(result) == 3:
before = result[0]
content = result[1]
after = result[2] #等同于 before,content,after = result
r = f1(content)
new_str = before + str(r) +after
origin = new_str
else:
print(origin)
break