Python基础(Day 11)(正则 系统模块 sys os)

知识点总结:

  1. 正则表达式
  2. 系统工具
    1) sys
    2) os

正则表达式

在这里插入图片描述

>>> import re
>>> text = 'Tom is 8 years old. Mike is 25 years old.'

# 模式匹配数字
>>> pattern = re.compile('\d+')
>>> pattern.findall(text)
['8', '25']

# re直接匹配数字
>>> re.findall('\d+',text)
['8', '25']

# 匹配特殊符号需转义\
>>> s = "\\author:Tom"
>>> pattern = re.compile('\\\\author')
>>> pattern.findall(s)
['\\author']

# 匹配符号方法而,或者r''
>>> pattern = re.compile(r'\\author')
>>> pattern.findall(s)
['\\author']

# findall()找到所有匹配项
>>> p_name = re.compile(r'[A-Z]\w+')
>>> p_name.findall(text)
['Tom', 'Mike']

# match返回MatchObject
>>> pattern = re.compile(r'<html>')
>>> text2 = '<html><head></head><body></body></html>'
>>> pattern.match(text2)
<_sre.SRE_Match object; span=(0, 6), match='<html>'>

text3 = ' <html><head></head><body></body></html>'
# match默认从头匹配(无结果)
pattern.match(text3)

# match从位置1匹配
pattern.match(text3, 1)
<_sre.SRE_Match object; span=(1, 7), match='<html>'>

# search全匹配
pattern.search(text3)
<_sre.SRE_Match object; span=(1, 7), match='<html>'>

# finditer()返回匹配结果的迭代器
>>> pattern = re.compile('\d+')
>>> pattern.finditer(text)
<callable_iterator object at 0x0000028D5BA4A630>

>>> it = pattern.finditer(text)
for m in it:
    print(m)
    
<_sre.SRE_Match object; span=(7, 8), match='8'>
<_sre.SRE_Match object; span=(28, 30), match='25'>

>>> pattern = re.compile(r'(\d+).*?(\d+)')
>>> m = pattern.search(text)
>>> m
<_sre.SRE_Match object; span=(7, 30), match='8 years old. Mike is 25'>
>>> m.group()
'8 years old. Mike is 25'
>>> m.group(0)
'8 years old. Mike is 25'
>>> m.group(1)
'8'
>>> m.group(2)
'25'
>>> m.groups()
('8', '25')
>>> m.groups(1)
('8', '25')
>>> m.groups(2)
('8', '25')
>>> m.groups()[1]
'25'
>>> m.groups()[0]
'8'
>>> m.start(1)
7
>>> m.start(2)
28
>>> m.end(1)
8
>>> m.end(2)
30

# 匹配连续两个单词
>>> pattern = re.compile(r'(\w+) (\w+)')
>>> pattern.findall(text)
[('Tom', 'is'), ('8', 'years'), ('Mike', 'is'), ('25', 'years')]
>>> it = pattern.finditer(text)
>>> for m in it:
>>>     print(m)
    
<_sre.SRE_Match object; span=(0, 6), match='Tom is'>
<_sre.SRE_Match object; span=(7, 14), match='8 years'>
<_sre.SRE_Match object; span=(20, 27), match='Mike is'>
<_sre.SRE_Match object; span=(28, 36), match='25 years'>

>>> re.search(r'(ab)+c','ababcab')
<_sre.SRE_Match object; span=(0, 5), match='ababc'>

# 想要匹配er|re结尾,失败
>>> re.search(r'Center|re','Center')
<_sre.SRE_Match object; span=(0, 6), match='Center'>
# 想要匹配er|re结尾,成功
>>> re.search(r'Cent(er|re)','Centre')
<_sre.SRE_Match object; span=(0, 6), match='Centre'>

# 编组()重用
>>> re.search(r'(\w+) \1','hello world')
re.search(r'(\w+) \1','hello hello world ')
<_sre.SRE_Match object; span=(0, 11), match='hello hello'>

# 编组别名
>>> text4 = 'Tom:98'
>>> pattern = re.compile(r'(?P<name>\w+):(?P<score>\d+)')
>>> m = pattern.search(text4)
>>> m.group()
'Tom:98'
>>> m.group(1)
'Tom'
>>> m.group('name')
'Tom'
>>> m.group('score')
'98'
>>> m.groups()
('Tom', '98')
>>> m
<_sre.SRE_Match object; span=(0, 6), match='Tom:98'>

>>> text5 = 'Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.'
# 按\n分割
>>> p = re.compile(r'\n')
>>> p.split(text5)
['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.']
>>> re.split(r'\n',text5)
['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.']

# 按词分割
>>> re.split(r'\W',text5)
['Beautiful', 'is', 'better', 'than', 'ugly', '', 'Explicit', 'is', 'better', 'than', 'implicit', '', 'Simple', 'is', 'better', 'than', 'complex', '']

# 编组切分会保留编组范围内容
>>> re.split(r'(-)','Good-morning')
['Good', '-', 'morning']

# 最多切分出2项
>>> re.split(r'\n',text5,2)
['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.']

# 最多切分出1项
>>> re.split(r'\n',text5,1)
['Beautiful is better than ugly.', 'Explicit is better than implicit.\nSimple is better than complex.']

# 替换
>>> ords = 'ROD000\nORD001\nORD003'
>>> re.sub(r'\d+','-',ords)
'ROD-\nORD-\nORD-'
>>> text5 = 'Beautiful is *better* than ugly.\nExplicit is better than implicit.\nSimple is better than complex.'

# 利用编组别名替换
>>> re.sub(r'\*(.*?)\*', '<strong>\g<1></strong>',text5)
'Beautiful is <strong>better</strong> than ugly.\nExplicit is better than implicit.\nSimple is better than complex.'

# 利用编组别名替换
>>> re.sub(r'\*(?P<html>.*?)\*', '<strong>\g<html></strong>',text5)
'Beautiful is <strong>better</strong> than ugly.\nExplicit is better than implicit.\nSimple is better than complex.'

>>> ords
'ROD000\nORD001\nORD003'
>>> re.sub(r'([A-Z]+)(\d+)','\g<2>-\g<1>',ords)
'000-ROD\n001-ORD\n003-ORD'
>>> re.subn(r'([A-Z]+)(\d+)','\g<2>-\g<1>',ords)
('000-ROD\n001-ORD\n003-ORD', 3)
>>> text6 = 'Python python PYTHON'

>>> re.search(r'python',text6)
<_sre.SRE_Match object; span=(7, 13), match='python'>

# 默认区分大小写
>>> re.findall(r'python',text6)
['python']

# re.I不区分大小写
>>> re.findall(r'python',text6,re.I)
['Python', 'python', 'PYTHON']

# 换行匹配
>>> re.findall(r'^<html>','\n<html>',re.M)
['<html>']
>>> re.findall(r'\d(.)','1\ne')
[]
>>> re.findall(r'\d(.)','1\ne',re.S)
['\n']

>>> re.purge()

# 匹配逃逸字符^ ? %
>>> re.findall(r'^','^python')
['']
re.findall(re.escape('^'),'^python^')
['^', '^']

系统工具

在这里插入图片描述

发布了45 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_22096121/article/details/103302378
今日推荐