Python正则表达式练习


#re正则表达式
import re

#1通配符(.可匹配出换行符外的任意一个字符.ython-->qython +ython)
#2特殊字符进行转义 Python\.org或使用原始字符r'Python.org'
#3[]字符集 [pg]ython-->匹配python、gython [a-z]匹配a到z任意一个字符 [a-zA-Z0-9]匹配任意一个大小写字母和数字
#4 |选择符 管道| python|jython-->匹配字符串python和jython
#5()子模式:只选择模式的一部分() p(ython|json)-->匹配python pjson单个字符
#6? 可选项:在子模式后加?变成可选项
"""
r'(http://)?(www.)?python.org'
==>可能匹配的字符串:
http://www.python.org
www.python.org
http://python.org
python.org
"""

"""
(param)*:允许模式重复0次或多次
(param)+:允许模式重复1次或多次
(param){m,n}:允许模式重复m-n次
r'w*.python.org'==>匹配到'www.python.org' 也会匹配'.python.org',也会匹配'wwwwwwww.python.org'
r'w+.python.org'==>匹配到'w.python.org'但不会匹配到.python.org
r'w{3,4}.python.org'==>匹配到'www.python.org'和'wwww.python.org'
"""
#7 字符串的开始^和结尾$
#^脱字符标记开始 ^ht+p ==>只想在字符串的开始,而不是其他位置匹配ht+p

#8 re match从字符串开头开始匹配
print(re.match('w','python'))
print(re.match('p','python'))

#9 split
txt = 'He.hello.....test.head.falj.kfal'
print(re.split('[.]+',txt))
print(re.split('[.]',txt))

"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
None
<_sre.SRE_Match object; span=(0, 1), match='p'>
['He', 'hello', 'test', 'head', 'falj', 'kfal']
['He', 'hello', '', '', '', '', 'test', 'head', 'falj', 'kfal']
"""

#10 最多可以分割的部分数
txt = 'He.hello.....test.head.falj.kfal'
print(re.split('[.]+',txt,maxsplit=2))
print(re.split('[.]+',txt,maxsplit=1))

"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
['He', 'hello', 'test.head.falj.kfal']
['He', 'hello.....test.head.falj.kfal']
"""

#11在字符串中查找所有单词 findall以列表的形式返回
p = '[a-zA-Z]+'
word = "hello,world,I,am you -- hefajlka?"
print("查找单词:",re.findall(p,word))
q = r'[-?]'
print("查找标点符号",re.findall(q,word))

"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
查找单词: ['hello', 'world', 'I', 'am', 'you', 'hefajlka']
查找标点符号 ['-', '-', '?']
"""

#12 sub 替换
pat = '{name}'
txt = "Hello {name}"
print(re.sub(pat,'张三',txt))

"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
Hello 张三
"""

#13 匹配对象和组
'There (was a(wee) (cooper)) who (lived in fyfe)'
"""
组0 -- There was a wee cooper who lived in fyfe
组1 -- was a wee cooper
组2 -- wee
组3 -- cooper
组4 -- lived in fyfe
"""
"r'www.(.+).com$==>组0包含整个字符串 组1包含位于www和com之间的所有内容"
m = re.match(r'www.(.*)..{3}','www.python.org')
print(m.group(0),m.group(1))
print("start:",m.start(),"end:",m.end(),"span:",m.span())
"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
www.python.org python
start: 0 end: 14 span: (0, 14)
"""

#14将*world*替换成<em>world<em> 1为组号
exp_re = r'*([^*]+)*'
print(re.sub(exp_re,r'<em>1<em>',"Hello,*world*"))
"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
Hello,<em>world<em>
"""

#15 #compile处理正则表达式 处理效率更高 将取出的子模式放在圆括号中作为组
# $匹配整行 ?费贪婪模式
str = "From: Foo Fie <foo@bar.baz>"
pat = re.compile('From:(.*)<.*?>$')
m = pat.match(str)
print(m.group(1))
print(m.group(0))
"""
C:python3.7python.exe D:/Python-Test/qiubai/qiubai/Test9.py
Foo Fie
"""
原文地址:https://www.cnblogs.com/acer-haitao/p/7372464.html